一、題目描述
我們來定義一個函數 f(s),其中傳入參數 s 是一個非空字符串;該函數的功能是統計 s 中(按字典序比較)最小字母的出現頻次。
例如,若 s = “dcce”,那麼 f(s) = 2,因爲最小的字母是 “c”,它出現了 2 次。
現在,給你兩個字符串數組待查表 queries 和詞彙表 words,請你返回一個整數數組 answer 作爲答案,其中每個 answer[i] 是滿足 f(queries[i]) < f(W) 的詞的數目,W 是詞彙表 words 中的詞。
輸入:queries = ["cbd"], words = ["zaaaz"]
輸出:[1]
解釋:查詢 f("cbd") = 1,而 f("zaaaz") = 3 所以 f("cbd") < f("zaaaz")。
二、題解
方法一:模擬
算法
- 先統計 W 中每個字符串中最小的字符出現的次數與 count[] 中。
- 逐個遍歷字符串數組 Q,對其中的每一個字符串都與 count[] 中的出現次數比較一下,並將比較結果存入 res[] 中。
public int[] numSmallerByFrequency(String[] Q, String[] W) {
int N = W.length;
int[] count = new int[N];
for (int i = 0; i < N; i++) count[i] = count(W[i]);
int len = Q.length;
int[] res = new int[len];
int k = 0;
for (String q : Q) {
int cur = count(q);
int t = 0;
for (int i = 0; i < N; i++) {
if (count[i] > cur)
t++;
}
res[k++] = t;
}
return res;
}
//計算最小字母的出現個數
private int count(String s) {
int count = 0;
int[] map = new int[26];
for (char c : s.toCharArray()) {
map[c-'a']++;
}
for (int c : map)
if (c > 0)
return c;
return 0;
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,
方法二:
複雜度分析
- 時間複雜度:,
- 空間複雜度:,