其他分享
首页 > 其他分享> > 滑动窗口 - 替换后的最长重复字符

滑动窗口 - 替换后的最长重复字符

作者:互联网

题目链接

在这里插入图片描述
维护一个滑动窗口,记录窗口中出现频率最高的次数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