LeetCode刷题实战424:替换后的最长重复字符
You are given a string s and an integer k. You can choose any character of the string and change it to any other uppercase English character. You can perform this operation at most k times.
Return the length of the longest substring containing the same letter you can get after performing the above operations.
示例
示例 1:
输入:s = "ABAB", k = 2
输出:4
解释:用两个'A'替换为两个'B',反之亦然。
示例 2:
输入:s = "AABABBA", k = 1
输出:4
解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。
解题
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int> counts(26, 0); //记录当前窗口字母出现的个数
int left=0, res=0, maxCnt=0; // maxCnt记录字符出现次数最多那个字符 的次数
for(int i=0; icounts[s[i]-'A']++;
maxCnt = max(maxCnt, counts[s[i]-'A']); // 比较之前记录的最大数 和 当前字符的数量
while(i-left+1-maxCnt > k){ // 若当前窗口大小 减去 窗口中最多相同字符的个数 大于 k 时
counts[s[left]-'A']--; // 将窗口最左边的字符 在计数数组中减1
left++; // 滑动窗口
}
res = max(res, i-left+1);
}
return res;
}
};