【字符串】C022_比較字符串最小字母出現頻次(統計字符數量)

一、題目描述

我們來定義一個函數 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;
}

複雜度分析

  • 時間複雜度:O(n×m)O(n × m)
  • 空間複雜度:O(n+m)O(n + m)

方法二:


複雜度分析

  • 時間複雜度:O()O()
  • 空間複雜度:O()O()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章