// 维护一个窗口,满足窗口长度-窗口中的重复字母的最大个数<=k
// 窗口中重复字符的最大个数不好维护,因为当滑动窗口改变时,这个个数会变
// 一种方案是枚举26个字母,然后枚举窗口中字符的最大个数。
这种方法更加直观。不容易出错。
class Solution {
public:
int characterReplacement(string s, int k) {
// 维护一个窗口,满足窗口长度-窗口中的重复字母的最大个数<=k
// 窗口中重复字符的最大个数不好维护,因为当滑动窗口改变时,这个个数会变
// 一种方案是枚举26个字母
int res = 0;
for(char c='A';c<='Z';c++){
int count = 0;
for(int i=0,j=0;j<s.size();j++){
if(s[j]==c) count++;
while(j-i+1-count>k){
if(s[i]==c) count--;
i++;
}
res = max(res,j-i+1);
}
}
return res;
}
};
另外还有特殊的方法是不需要维护窗口的最大值,这个比较巧妙,在这里就不展开了。