zoukankan      html  css  js  c++  java
  • 1170. Compare Strings by Frequency of the Smallest Character

    问题:

    给定一组目标字符串数组 queries,和一个参照系字符串数组 words

    求queries中的各个字符串:最小字符出现次数< words中最小字符出现次数的参照字符串的个数。

    记字符串出现最小次数为函数fun

    Example 1:
    Input: queries = ["cbd"], words = ["zaaaz"]
    Output: [1]
    Explanation: On the first query we have f("cbd") = 1, f("zaaaz") = 3 so f("cbd") < f("zaaaz").
    
    Example 2:
    Input: queries = ["bbb","cc"], words = ["a","aa","aaa","aaaa"]
    Output: [1,2]
    Explanation: On the first query only f("bbb") < f("aaaa"). On the second query both f("aaa") and f("aaaa") are both > f("cc").
     
    Constraints:
    1 <= queries.length <= 2000
    1 <= words.length <= 2000
    1 <= queries[i].length, words[i].length <= 10
    queries[i][j], words[i][j] are English lowercase letters.
    

      

    解法:

    首先求fun函数:

    26个字符,计数算法:

    计数遍历的同时,记录到当前为止最小字符 minc[0] & 最小字符出现的次数 minc[2]

    初始化,最小字符为 26,出现次数为 0

     1     int fun(string &q){
     2         int alphbet[26]={0};
     3         vector<int> minc={26,0};
     4         for(char c:q){
     5             alphbet[c-'a']++;
     6             if(c-'a'<=minc[0]){
     7                 minc[0]=c-'a';
     8                 minc[1]=alphbet[c-'a'];
     9             }
    10         }
    11         return minc[1];
    12     }

    然后,总体看题意所求。

    1.目标字符串数组 queries 的各个字符串 queries[i],会对应求出一个结果res[i]

    那么首先,对 queries 的各个字符串,求出其fun的结果,计入queriesf

    2.参照字符串数组 words :使用满足 >某个fun结果值 的字符串个数。

    那么使用计数算法,对words的每个fun结果,进行计数。计入wordsfc

    wordsfc[i] 记录fun结果为 i 的words中字符串个数。

    再,所求为 > 某个计数值,我们再对wordsfc进行累计,

    使得 wordsfc[i] 记录fun结果 >i 的words中字符串个数。

    3.对每个queriesf,在wordsfc中找到所要求的个数,即可。

    res[i]=wordsfc[queriesf[i]+1]

    代码参考:

     1 class Solution {
     2 public:
     3     int fun(string &q){
     4         int alphbet[26]={0};
     5         vector<int> minc={26,0};
     6         for(char c:q){
     7             alphbet[c-'a']++;
     8             if(c-'a'<=minc[0]){
     9                 minc[0]=c-'a';
    10                 minc[1]=alphbet[c-'a'];
    11             }
    12         }
    13         return minc[1];
    14     }
    15     vector<int> numSmallerByFrequency(vector<string>& queries, vector<string>& words) {
    16         vector<int> queriesf;//每个元素的f结果
    17         vector<int> wordsfc(12,0);//长度为1~10的分别有几个
    18         vector<int> res;
    19         for(string &q:queries){
    20             queriesf.push_back(fun(q));
    21         }
    22         for(string &w:words){
    23             wordsfc[fun(w)]++;
    24         }
    25         for(int i=10; i>=0; i--){
    26             wordsfc[i]+=wordsfc[i+1];
    27         }
    28         for(int qf:queriesf){
    29             res.push_back(wordsfc[qf+1]);
    30         }
    31         return res;
    32     }
    33 };
  • 相关阅读:
    201571030321 马玉婷 实验二 小学四则运算
    构建之法浅思
    个人学期总结
    201571030320/201571030335《小学四则运算练习软件软件需求说明》结对项目报告
    201571030320/201571030335《小学四则运算练习软件》结对项目报告
    201571030320+小学四则运算练习软件项目报告
    初读《构建之法》所思所问
    个人学期总结
    201571030318/201574010343《小学四则运算练习软件软件需求说明》结对项目报告
    201571030318/201574010343《小学四则混合运算》结队报告 马麒
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13237675.html
Copyright © 2011-2022 走看看