题解
一开始不太会做看了教程才会的。
双指针,左右各一个,一开始都指向第一个字母,然后右指针右移并且计算当前字母的个数,并且记录出最大值。如果当前重复的最大值中在区间内不一样的个数大于k那么左指针右移,保持区间大小不变。
代码
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int>num(26);//26个字母
int n = s.length();
int maxn = 0;
int left = 0,right = 0;
while(right < n){
num[s[right] - 'A']++;
maxn = max(maxn,num[s[right]-'A']);//更新最大值
if(right - left + 1 - maxn > k){//如果不一样的字符超过k个那么左指针右移。
num[s[left] - 'A']--;
left++;
}
right++;
}
return right - left;
}
};