1297. Maximum Number of Occurrences of a Substring

シンプルではあるが難しい

https://leetcode.com/problems/maximum-number-of-occurrences-of-a-substring/discuss/457717/Simple-Sliding-Window-C%2B%2B-Solution

class Solution {
public:
    int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
        unordered_map<char, int> m; //文字種類数
        unordered_map<string, int> subs;
        
        int j=0;
        for(int i= 0; i< s.size(); i++){
            m[s[i]]++;
            //現在のsubstringのサイズ
            int currSize = i-j+1;
            while(m.size() > maxLetters || currSize > minSize)
            {
                int start = j;
                m[s[j]]--;
                if(m[s[j]] == 0){
                    m.erase(s[j]);
                }
                    
                j++;
                currSize--;
            }
    //現在のsubstringのサイズがminSize以上なら候補として保存
            if(currSize >= minSize)
            {
                subs[ s.substr(j, currSize) ]++;
            }
        }
        
        int maxc = 0;
        for(auto it = subs.begin(); it != subs.end(); it++)
        {
            maxc = max( maxc, it->second);
        }
        return maxc;
    }
};