【每日一题Day233】LC1170比较字符串最小字母出现频次 | 前缀和

news/2024/11/30 15:26:48/

比较字符串最小字母出现频次【LC1170】

定义一个函数 f(s),统计 s 中**(按字典序比较)最小字母的出现频次** ,其中 s 是一个非空字符串。

例如,若 s = "dcce",那么 f(s) = 2,因为字典序最小字母是 "c",它出现了 2 次。

现在,给你两个字符串数组待查表 queries 和词汇表 words 。对于每次查询 queries[i] ,需统计 words 中满足 f(queries[i]) < f(W)词的数目W 表示词汇表 words 中的每个词。

请你返回一个整数数组 answer 作为答案,其中每个 answer[i] 是第 i 次查询的结果。

  • 思路

    设计f方法返回字符串的最小字母出现的个数,使用数组记录最小字母出现的个数为 x x xwords个数,并使用前缀和数组sum进行记录小于等于 x x xwords个数,那么对于最小词频个数为 y y y的查询,其结果为 s u m [ m − 1 ] − s u m [ y ] sum[m-1]-sum[y] sum[m1]sum[y]

  • 实现

    class Solution {public int[] numSmallerByFrequency(String[] queries, String[] words) {int[] count = new int[11];int[] sum = new int[11];int m = sum.length, n = queries.length;for (String word : words){count[f(word)]++;}for (int i = 1; i < m; i++){sum[i] = sum[i - 1] + count[i];}int[] res = new int[n];for (int i = 0; i < n; i++){int val = f(queries[i]);res[i] = sum[m - 1] - sum[val];}return res;}public int f(String s){int[] count = new int[26];for (char c : s.toCharArray()){count[c - 'a']++;}for (int i = 0; i < 26; i++){if (count[i] != 0){return count[i];}}return -1;}
    }
    
    • 复杂度
      • 时间复杂度: O ( ( n + m ) p ) \mathcal{O}((n+m)p) O((n+m)p),n和m为数组长度,p为数组中最长的字符串穿度
      • 空间复杂度: O ( C ) \mathcal{O}(C) O(C)
  • 优化

    • 使用后缀和代替前缀和
    • f方法不使用哈希表统计,我们只需要统计一个最小字符出现的数目,因此可以先假设是最大字符,然后遍历字符串进行比较,遇到更小的字符时更新字符重置出现次数【好久没用都忘了】
    class Solution {public int[] numSmallerByFrequency(String[] queries, String[] words) {int[] count = new int[12];for (String s : words) {count[f(s)]++;}for (int i = 9; i >= 1; i--) {count[i] += count[i + 1];}int[] res = new int[queries.length];for (int i = 0; i < queries.length; i++) {String s = queries[i];res[i] = count[f(s) + 1];}return res;}public int f(String s) {int cnt = 0;char ch = 'z';for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c < ch) {ch = c;cnt = 1;} else if (c == ch) {cnt++;}}return cnt;}
    }作者:力扣官方题解
    链接:https://leetcode.cn/problems/compare-strings-by-frequency-of-the-smallest-character/solutions/2297291/bi-jiao-zi-fu-chuan-zui-xiao-zi-mu-chu-x-pb50/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

http://www.ppmy.cn/news/363274.html

相关文章

asp.net基于BS的图书销售管理系统的设计与实现

摘 要 随着Internet的兴起,网络已经成为现代人生活中的一部分,越来越多的人喜欢在网上交易。本系统就是一个基于B/S模式的网络化的图书销售管理系统,采用的是ASP.NET技术,实现了用户注册信息管理、用户信息管理、图书销售点管理、图书信息管理、客户订单管理、购物信息管理…

drwtsn32抓不到程序出错信息?!

VC开发的程序出错退出了&#xff0c;但drwtsn32没有抓到程序出错信息&#xff0c;只能根据系统日志中的一个错误地址 0x0002b790 去确定源代码出错行&#xff0d;&#xff0d;累个半死&#xff0c;连猜带蒙&#xff0c;还算不错&#xff0c;找到了。 后来意识到了drwtsn32抓不到…

打开网页中提示: drwtsn32.exe-应用程序错误-解决方法

打开网页中提示&#xff1a; drwtsn32.exe-应用程序错误 应用程序发生异常 未知的软件异常(0XC0000409)&#xff0c;位置0X68D7295D。 解决方案&#xff1a; 1、运行"中输入"drwtsn32"命令&#xff0c;或者"开始"->"程序"->"附件…

结合drwtsn32.log和.Map文件的查看、定位程序错误位置

写下大致步骤方便以后查找 参考内容在两个链接的后半部分 http://blog.csdn.net/nokianasty/article/details/8504432 http://blog.chinaunix.net/uid-7186957-id-2677948.html 主要步骤&#xff1a; 1、在drwtsn32.log找到错误位置&#xff1a;错误 ->00458861 ff9098…

drwtsn32.exe 是什么?drwtsn32.exe遇到问题需要关闭?

出现drwtsn32.exe这个问题&#xff0c;一般都是全新安装的系统&#xff0c;才会出现drwtsn32.exe遇到问题需要关闭。很郁闷&#xff0c;已经好多次了&#xff0c;今天把这个话题列出来&#xff0c;讨论一下。drwtsn32.exe是windows的一项磁盘检查程序&#xff0c;同时也是鸡肋程…

XP环境下调试诊断工具drwtsn32的使用说明

我们在使用程序过程中&#xff0c;经常会遇到如下的警告 在点击确定之后&#xff0c;出错的程序便退出了&#xff0c;这是由于当 Windows中出现程序错误时&#xff0c;系统将搜索错误处理程序。程序错误处理程序处理程序运行过程中出现的错误。如果系统找不到程序错误处理程序&…

drwtsn32.exe遇到问题需要关闭

出现drwtsn32.exe这个问题&#xff0c;一般都是全新安装的系统&#xff0c;才会出现drwtsn32.exe遇到问题需要关闭。很郁闷&#xff0c;已经好多次了&#xff0c;今天把这个话题列出来&#xff0c;讨论一下。drwtsn32.exe是windows的一项磁盘检查程序&#xff0c;同时也是鸡肋程…

drwtsn32.exe 遇到问题需要关闭

因为Windows程序是如此易于崩溃&#xff0c;所以不能排除恶意用户利用此弱点获取非授权信息 的可能。例如&#xff1a;利用IE5.0以上的畸形注释漏洞就可以使浏览包含恶意代码的iexplore.exe 和查看包含恶意代码的邮件程序崩溃。&#xff08;关于IE的畸形注释漏洞请参见拙作《包…