leetcode-华为专题-424. 替换后的最长重复字符

 

 

class Solution {
public:
    int characterReplacement(string s, int k) {
        unordered_map<char,int> un_map;

        int left = 0;
        int res = 0;
        int maxval = 0;
        for(int right = 0; right < s.size(); right++){
            un_map[s[right]]++;
            maxval = max(maxval,un_map[s[right]]); // 找出当前区间内字母出现最大的次数
            // right-left+1是当前区间元素个数
            // k+maxval是替换k个字符后,频次最多的个数
            while(right-left+1>k+maxval){ // 替换k个字符后仍含有不同字符,收缩区间
                un_map[s[left]]--;  // 频次减一,收缩区间
                left++;  // 左指针右移
            }
           // right++;
           // right-left+1肯定不超过k+maxval,因为如果大于,上面的while循环会收缩区间
            res = max(res, right-left+1);
        }
        return res;
    }
};

 

posted @ 2021-08-14 16:43  三一一一317  阅读(45)  评论(0)    收藏  举报