天天看點

leetcode 比較字元串最小字母出現頻次

我們來定義一個函數 

f(s)

,其中傳入參數 

s

 是一個非空字元串;該函數的功能是統計 

s

  中(按字典序比較)最小字母的出現頻次。

例如,若 

s = "dcce"

,那麼 

f(s) = 2

,因為最小的字母是 

"c"

,它出現了 2 次。

現在,給你兩個字元串數組待查表 

queries

 和詞彙表 

words

,請你傳回一個整數數組 

answer

 作為答案,其中每個 

answer[i]

 是滿足 

f(queries[i])

 < 

f(W)

 的詞的數目,

W

 是詞彙表 

words

 中的詞。

示例 1:

輸入:queries = ["cbd"], words = ["zaaaz"]
輸出:[1]
解釋:查詢 f("cbd") = 1,而 f("zaaaz") = 3 是以 f("cbd") < f("zaaaz")。
      

示例 2:

輸入:queries = ["bbb","cc"], words = ["a","aa","aaa","aaaa"]
輸出:[1,2]
解釋:第一個查詢 f("bbb") < f("aaaa"),第二個查詢 f("aaa") 和 f("aaaa") 都 > f("cc")。
      

提示:

  • 1 <= queries.length <= 2000

  • 1 <= words.length <= 2000

  • 1 <= queries[i].length, words[i].length <= 10

  • queries[i][j]

    words[i][j]

     都是小寫英文字母
class Solution {
    public int count(String st){
        int i,k=27;
        int[] num=new int[27];
        for(i=0;i<st.length();i++){
            if(k>st.charAt(i)-'a') k=st.charAt(i)-'a';
            num[st.charAt(i)-'a']++;
        }
        return num[k];
}
    public int[] numSmallerByFrequency(String[] queries, String[] words) {
        int[] res=new int[queries.length];
        int i,j,k,mres;
        int[] f2=new int[words.length];
        for(i=0;i<words.length;i++) f2[i]=count(words[i]);
        for(i=0;i<queries.length;i++){
            k=count(queries[i]);
            mres=0;
            for(j=0;j<words.length;j++){
                if(f2[j]>k)mres++;
            }
            res[i]=mres;
        }
        return res;
    }
}