题目
- 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:字符串长度 和 k 不会超过 104。
题解思路
用right 和 left 维护一个区间,右移 right 统计中间除了出现次数最多的字符其余字符的出现次数,保证不超过k,否则left 右移,这样当我们右指针移动到尽头,左右指针对应的区间的长度必然对应一个长度最大的符合条件的区间。
代码
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int> v(26,0);
int len=s.size();
int r=0,l=0;
int maxnum=0;
while(r<len){
v[s[r]-'A']++;
maxnum=max(maxnum,v[s[r]-'A']);
if(r-l+1-maxnum >k){
v[s[l]-'A']--;
l++;
}
r++;
}
return r-l;
}
};