滑动窗口 - 替换后的最长重复字符
作者:互联网
维护一个滑动窗口,记录窗口中出现频率最高的次数maxCnt,当窗口大小
(
r
i
g
h
t
−
l
e
f
t
)
>
m
a
x
C
n
t
+
k
(right - left) > maxCnt + k
(right−left)>maxCnt+k时,表示当前无法通过替换k个字符满足要求,这时需要将窗口左边界右移。
在编写代码时,虽然不能保证窗口中maxCnt的正确性,但是只有当前窗口中出现频率最高的次数达到上一次的maxCnt,才会有更优解,所以并不影响最终解。
class Solution {
public:
int characterReplacement(string s, int k) {
int n = s.size();
vector<int> cnt(26, 0);
int maxCnt = 0;
int ans = 0;
int left = 0, right = 0;
while (right < n) {
cnt[s[right] - 'A']++;
maxCnt = max(maxCnt, cnt[s[right] - 'A']);
right++;
if (right - left > k + maxCnt) {
// 虽然不能保证maxCnt的正确性,但是不影响最优解
cnt[s[left] - 'A']--;
left++;
}
ans = max(ans, right - left);
}
return ans;
}
};
标签:字符,right,窗口,int,ans,maxCnt,滑动,替换,left 来源: https://blog.csdn.net/henuyh/article/details/113666914