問題描述
給你一個僅由大寫英文字母組成的字符串,你可以將任意位置上的字符替換成另外的字符,總共可最多替換 k 次。在執行上述操作後,找到包含重複字母的最長子串的長度。
注意:
字符串長度 和 k 不會超過 104。
輸入:
s = “AABABBA”, k = 1
輸出:
4
解釋:
將中間的一個’A’替換爲’B’,字符串變爲 “AABBBBA”。
子串 “BBBB” 有最長重複字母, 答案爲 4。
解題報告
不解釋,看代碼。
實現代碼
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int>window(26,0);
int maxx=0, l=0,r=0,idx,ans=0;
while(r<s.size()){
idx=s[r]-'A';
window[idx]++;
maxx=max(maxx, window[idx]);
if(r-l+1-maxx>k){
idx=s[l]-'A';
window[idx]--;
l++;
}
ans=max(ans, r-l+1);
r++;
}
return ans;
}
};