LeetCode 1297 子串的最大出现次数

LeetCode 1297 子串的最大出现次数

🟠 中等偏上

https://leetcode.cn/problems/maximum-number-of-occurrences-of-a-substring/description/

特殊的点

如果字符串 abcf 出现了5次,那么 abc 一定不止出现了5次。也就是说:短的字符串出现的次数一定比长的出现次数多。

因此可以用最短的限制长度 minSize 来滑动收集每种子串出现的次数,另外还要限制窗口内的字母种类数目因此窗口用 hash_map 维护,每种子串也用 hash_map 维护。

class Solution {

public:

    int maxFreq(string s, int maxLetters, int minSize, int maxSize) {

        unordered_map<char,int> char_count;

        unordered_map<string,int> sub_str;

        for(int i = 0;i<=minSize-2;i++){

            char_count[s[i]]++;

        }

        int max_count = 0;

        for(int i = minSize-1;i<s.size();i++){

            char_count[s[i]]++;

            if(char_count.size()<=maxLetters){

                sub_str[s.substr(i-minSize+1,minSize)]++;

                max_count  = max(max_count,sub_str[s.substr(i-minSize+1,minSize)]);

            }

            char_count[s[i-minSize+1]]--;

            if(char_count[s[i-minSize+1]]==0){

                char_count.erase(s[i-minSize+1]);

            }

        }

        return max_count;

    }

};