leetcode-424. 替换后的最长重复字符之滑动窗口

leetcode-424. 替换后的最长重复字符之滑动窗口_第1张图片据说这题是字节笔试的第一题,说不定leetcode这个月是双指针月?
这题的思路我其实是有了,怎么样保证子串在k次替换以内成为全部重复呢?**只要子串长度减去子串中重复次数最多的元素出现的次数不大于k就可以!**但是怎么不断的维护统计重复次数最多的元素出现的次数是我没有想到的。
实际上这题的解法,就是求以字符串中每个字符其最长重复长度,然后返回其中最长的作为答案!

class Solution {
     
public:
    int characterReplacement(string s, int k) {
             
        int left = 0;
        int right = 0;
        vector<int> list(26,0);
        int max_element = 0;
        int res = 0;
        while(right<s.size()){
     
            list[s[right]-'A']++;
            max_element = max(list[s[right]-'A'],max_element);
      		// 要是子串长度减去子串中重复次数最多的元素出现的次数大于k了,那么需要左边界收缩至符合条件的情况(小于等于k)
            while(right-left+1-max_element>k){
     
                list[s[left]-'A']--;
                left++;
            }
      
            res = max(res,right-left+1);
            right++;
        }
        return res;
    }
};

你可能感兴趣的:(leetcode)