leetcode424_替换后的最长重复字符

leetcode424_替换后的最长重复字符_第1张图片

1. 依旧套用滑动窗口模板.

2. 窗口的大小与新单个字符的最大计数个数的差值即为可以替换的字符个数

3. 我们只需要关心新字符的到来会不会超过当前窗口的最大计数的个数.

4. 最难理解的部分是为何不需要更新maxCount, 滑动平均需要找到第一个不满足条件的字符串,且要是最长的,因此不更新不影响结果.

5. 最长的字符串一定在maxCount最大的时候取到, 否则一定有更长的字符串.

class Solution {
public:
    int characterReplacement(string s, int k) {
        if(s.length()==0) return 0;
        int left=0, right=0;
        map window;
        int maxCount = 0;
        int res = INT_MIN;
        while(rightk) {
                window[s[left]]--;
                //这里不需要更新maxCount的原因是maxCount有可能偏大,
                //但是不会影响结果,因为我们做滑动平均找到的是第一个
                //不满足条件的字符串,所以只需要将窗口整体向右移动就可以了,
                //这个字符串不可能比之前记录的要长.
                left++; 
            }
        }
        return res; 
    }
};

leetcode424_替换后的最长重复字符_第2张图片

你可能感兴趣的:(leetcode刷题,#,滑动窗口)