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; } };