1297. 子串的最大出现次数 - 力扣(LeetCode)
条件约束为:
- 不同字母数目小于等于 maxLetters
- 子串长度大于等于 minSize 且小于等于 maxSize
思路:
- 子串越短,越容易满足条件一,并且次数出现最大。
- 转化为定长滑动窗口,定长为 minSize。
- 遵循滑动窗口模板:右边进入 -> 判断长度 -> 判断结果 -> 左边出去
class Solution {
public int maxFreq(String S, int maxLetters, int minSize, int maxSize) {
int[] num = new int[26];
Set<Character> letter = new HashSet<>();
char[] s = S.toCharArray();
Map<String,Integer> res = new HashMap<>();
StringBuilder sb=new StringBuilder();
int l=0,cur;
for(int i=0;i<s.length;i++){
cur=s[i]-'a';
letter.add(s[i]);
num[cur]++;
sb.append(s[i]);
if(i<minSize-1){
continue;
}
if(letter.size()<=maxLetters){
res.merge(sb.toString(),1,Integer::sum);
}
sb.deleteCharAt(0);
if(--num[s[l]-'a']==0){
letter.remove(s[l]);
}
l++;
}
int r=0;
for(int v:res.values()){
r=Math.max(r,v);
}
return r;
}
}
