给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:
字符串长度 和 k 不会超过 104。
示例 1:
输入:
s = "ABAB", k = 2
输出:
4
解释:
用两个'A'替换为两个'B',反之亦然。
示例 2:
输入:
s = "AABABBA", k = 1
输出:
4
解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。
C++
class Solution {
public:
int characterReplacement(string s, int k)
{
int n=s.length();
vector<int> tmp(26,0);
int res=0;
int start=0;
for(int i=0;i<n;i++)
{
tmp[s[i]-'A']++;
count=*max_element(tmp.begin(),tmp.end());
while(i-start+1-count>k)
{
tmp[s[start]-'A']--;
count=*max_element(tmp.begin(),tmp.end());
start++;
}
res=max(res,i-start+1);
}
return res;
}
};
python
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
n=len(s)
tmp=[0 for i in range(26)]
res=0
start=0
for i in range(n):
tmp[ord(s[i])-ord('A')]+=1
count=max(tmp)
while i-start+1-count>k:
tmp[ord(s[start])-ord('A')]-=1
count=max(tmp)
start+=1
res=max(res,i-start+1)
return res