时间超时
class Solution {
public:
int characterReplacement(string s, int k) {
int left=0,right=0;
int res=0;
while(left<=s.size() && right<s.size()){
if(maxtime(s,left,right+1)+k>=right-left+1){
right++;
}
else {
res=max(res,right-left);
left++;
}
}
return max(res,right-left);
}
int maxtime(string s, int l,int r){
map<char,int> str;
map<char,int> :: iterator iter;
for(int i=l;i<r;i++){
str[s[i]]++;
}
int maxt=0;
for(iter=str.begin();iter!=str.end();iter++){
maxt=max(maxt,iter->second);
}
return maxt;
}
};
class Solution {
public:
int characterReplacement(string s, int k) {
int left=0,right=0;
int res=0;
while(left<=s.size() && right<s.size()){
if(maxtime(s,left,right+1)+k>=right-left+1){
right++;
}
else {
left++;right++;
}
// cout<<"left "<<left<<" right"<<right<<endl;
}
return max(res,right-left);
}
int maxtime(string s, int l,int r){
map<char,int> str;
map<char,int> :: iterator iter;
for(int i=l;i<r;i++){
str[s[i]]++;
}
int maxt=0;
for(iter=str.begin();iter!=str.end();iter++){
maxt=max(maxt,iter->second);
}
return maxt;
}
};
class Solution {
public:
int characterReplacement(string s, int k) {
int left=0,right=0;
int res=0;
map<char,int> str;
int maxt=0;
while(right<s.size()){
str[s[right]]++;
maxt=max(str[s[right]],maxt);
if(maxt+k>=right-left+1){
right++;
}
else {
str[s[left]]--;//这里不需要对maxt更新,因为一旦进入这个区域,则s[left]不对应出现次数最多的字符
left++;right++;
}
}
return right-left;
}
};