地址:https://leetcode-cn.com/problems/longest-repeating-character-replacement/
思路:思维
遍历子串的右端点r,同时记录过程中所满足条件的最大相同字符个数Max,对于r-l-Max>k的情况,则右移左端点l直至满足条件,最后保留最大值r-l即可
Code:
#include<iostream>
using namespace std;
class Solution {
public:
int characterReplacement(string s, int k) {
int a[30]={0},n=s.length();
int res=0,Max=0,l=-1,r=0;
while(r<n){
++a[s[r]-'A'];
Max=max(Max,a[s[r]-'A']);
while(r-l-Max>k){
--a[s[++l]-'A'];
}
res=max(res,r-l);
++r;
}
return res;
}
};
int main()
{
ios::sync_with_stdio(false);
int m;
string s;
Solution So;
cin>>s>>m;
int res=So.characterReplacement(s,m);
cout<<res<<endl;
return 0;
}