难度中等516收藏分享切换为英文接收动态反馈
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:字符串长度 和 k 不会超过 104。
示例 1:
输入:s = "ABAB", k = 2 输出:4 解释:用两个'A'替换为两个'B',反之亦然。
示例 2:
输入:s = "AABABBA", k = 1 输出:4 解释: 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 子串 "BBBB" 有最长重复字母, 答案为 4。
通过次数53,666提交次数100,852
请问您在哪类招聘中遇到此题
题目分析
有时候做题需要翻译翻译。特别是这种半实际半理论的题目经常不说人话,如果找到隐藏在傻逼翻译的谜语后真正的题意,往往题目就会变得简单无比。
AC代码
class Solution {
public:
int characterReplacement(string s, int k) {
unordered_map<char,int> window;
int l = 0,major = 0,n = s.size(),res = 0;
for(int r = 0;r < n;r++){
window[s[r]]++;
if(window[s[r]]>major){
major = window[s[r]];
}
while(r-l+1-major>k){
if(--window[s[l]] == 0){
window.erase(s[l]);
}
l++;
}
res = max(res,r-l+1);
}
return res;
}
};