LeetCode #1170 Compare Strings by Frequency of the Smallest Character 比較字符串最小字母出現(xiàn)頻次

1170 Compare Strings by Frequency of the Smallest Character 比較字符串最小字母出現(xiàn)頻次

Description:
Let's define a function f(s) over a non-empty string s, which calculates the frequency of the smallest character in s. For example, if s = "dcce" then f(s) = 2 because the smallest character is "c" and its frequency is 2.

Now, given string arrays queries and words, return an integer array answer, where each answer[i] is the number of words such that f(queries[i]) < f(W), where W is a word in words.

Example:

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.

題目描述:
我們來定義一個函數(shù) f(s)叙甸,其中傳入?yún)?shù) s 是一個非空字符串;該函數(shù)的功能是統(tǒng)計 s 中(按字典序比較)最小字母的出現(xiàn)頻次至非。

例如篷朵,若 s = "dcce"勾怒,那么 f(s) = 2婆排,因為最小的字母是 "c",它出現(xiàn)了 2 次笔链。

現(xiàn)在段只,給你兩個字符串數(shù)組待查表 queries 和詞匯表 words,請你返回一個整數(shù)數(shù)組 answer 作為答案鉴扫,其中每個 answer[i] 是滿足 f(queries[i]) < f(W) 的詞的數(shù)目赞枕,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] 都是小寫英文字母

思路:

用一張表記錄 words中的函數(shù)值出現(xiàn)的個數(shù), 函數(shù)的計算方法是對 words中的每個字符串進行排序, 找到最小的字符出現(xiàn)的次數(shù)
之后累計出現(xiàn)的值, 這個值代表大于這個值的個數(shù)有多少
比如 words = ["a","aa","aaa","aaaa"]
count對應的應該是 [0, 1, 1, 1, 1...]表示, 函數(shù)值為1, 2, 3, 4的分別有 1個, 累計值應該是 [0, 4, 3, 2, 1...] 表示大于函數(shù)值 0的有 4個, 大于函數(shù)值 1的有 3個, 以此類推
時間復雜度O(nmlgm), 空間復雜度O(1), n表示 max(words, queries的長度), m表示 max(words, queries中字符串的長度)

代碼:
C++:

class Solution 
{
public:
    vector<int> numSmallerByFrequency(vector<string>& queries, vector<string>& words) 
    {
        vector<int> result(queries.size(), 0), count(12, 0);
        for (int i = 0; i < words.size(); ++i) ++count[helper(words[i])];
        for (int i = 9; i >= 0; --i) count[i] += count[i + 1];
        for (int i = 0; i < queries.size(); ++i) result[i] = count[helper(queries[i]) + 1];
        return result;
    }
private:
    int helper(string s)
    {
        sort(s.begin(), s.end());
        int count = 1;
        for (int i = 1; i < s.size(); ++i)
        {
            if (s[i] == s[i - 1]) count++;
            else break;
        }
        return count;
    }
};

Java:

class Solution {
    public int[] numSmallerByFrequency(String[] queries, String[] words) {
        int count[] = new int[12], result[] = new int[queries.length];
        for (int i = 0; i < words.length; ++i) ++count[helper(words[i])];
        for (int i = 9; i >= 0; --i) count[i] += count[i + 1];
        for (int i = 0; i < queries.length; ++i) result[i] = count[helper(queries[i]) + 1];
        return result;
    }
    
    private int helper(String word) {
        char c[] = word.toCharArray();
        Arrays.sort(c);
        word = new String(c);
        int count = 1;
        for (int i = 1; i < word.length(); ++i) {
            if (word.charAt(i) == word.charAt(i - 1)) count++;
            else break;
        }
        return count;
    }
}

Python:

class Solution:
    def numSmallerByFrequency(self, queries: List[str], words: List[str]) -> List[int]:
        f = lambda x: x.count(min(x))
        w = sorted(map(f, words))
        return [len(words) - bisect.bisect(w, i) for i in map(f, queries)]
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末古话,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锁施,更是在濱河造成了極大的恐慌陪踩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悉抵,死亡現(xiàn)場離奇詭異肩狂,居然都是意外死亡,警方通過查閱死者的電腦和手機姥饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門傻谁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人列粪,你說我怎么就攤上這事审磁。” “怎么了岂座?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵态蒂,是天一觀的道長。 經(jīng)常有香客問我费什,道長钾恢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任鸳址,我火速辦了婚禮瘩蚪,結果婚禮上,老公的妹妹穿的比我還像新娘稿黍。我一直安慰自己疹瘦,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布闻察。 她就那樣靜靜地躺著拱礁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辕漂。 梳的紋絲不亂的頭發(fā)上呢灶,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音钉嘹,去河邊找鬼鸯乃。 笑死,一個胖子當著我的面吹牛跋涣,可吹牛的內(nèi)容都是我干的缨睡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陈辱,長吁一口氣:“原來是場噩夢啊……” “哼奖年!你這毒婦竟也來了?” 一聲冷哼從身側響起沛贪,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤陋守,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后利赋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體水评,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年媚送,在試婚紗的時候發(fā)現(xiàn)自己被綠了中燥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡塘偎,死狀恐怖疗涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吟秩,我是刑警寧澤博敬,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站峰尝,受9級特大地震影響偏窝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜武学,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一祭往、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧火窒,春花似錦硼补、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽离钝。三九已至,卻和暖如春褪储,著一層夾襖步出監(jiān)牢的瞬間卵渴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工鲤竹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浪读,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓辛藻,卻偏偏與公主長得像碘橘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吱肌,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容