// 維護一個窗口,滿足窗口長度-窗口中的重複字母的最大個數<=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;
}
};
另外還有特殊的方法是不需要維護窗口的最大值,這個比較巧妙,在這裏就不展開了。