classSolution {
public:int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
int res =0;
for (int i = minSize; i <= maxSize; i++) {
res = max(res, maxFreqWithWindowSize(s, maxLetters, i));
}
return res;
}
intmaxFreqWithWindowSize(string& s, int th, int k) {
int n = s.size();
int cnt[26];
memset(cnt, 0, sizeof(cnt));
int uq =0;
int res =0;
unordered_map<string, int> map;
for (int i =0; i < k; i++) {
if (cnt[s[i]-'a']++==0) uq++;
}
if (uq <= th) {
map[s.substr(0, k)]++;
res =1;
};
for (int i = k; i < n; i++) {
if (cnt[s[i]-'a']++==0) uq++;
if (--cnt[s[i-k]-'a'] ==0) uq--;
if (uq <= th) {
string t = s.substr(i-k+1, k);
res = max(res, ++map[t]);
}
}
return res;
}
};