给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 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