
class Solution {
public:
int characterReplacement(string s, int k) {
unordered_map<char,int> un_map;
int left = 0;
int res = 0;
int maxval = 0;
for(int right = 0; right < s.size(); right++){
un_map[s[right]]++;
maxval = max(maxval,un_map[s[right]]); // 找出当前区间内字母出现最大的次数
// right-left+1是当前区间元素个数
// k+maxval是替换k个字符后,频次最多的个数
while(right-left+1>k+maxval){ // 替换k个字符后仍含有不同字符,收缩区间
un_map[s[left]]--; // 频次减一,收缩区间
left++; // 左指针右移
}
// right++;
// right-left+1肯定不超过k+maxval,因为如果大于,上面的while循环会收缩区间
res = max(res, right-left+1);
}
return res;
}
};