一 双指针
424. 替换后的最长重复字符 - 力扣(LeetCode)
这是一个滑动窗口的问题, 问题可以转化为在一个滑动窗口内, max_cnt
表示出现次数最多的字母个数, 而除去出现次数最多的字母的其他字母的总个数不能超过 k
, 求这个滑动窗口的最大长度
class Solution { public: int characterReplacement(string s, int k) { unordered_map<char, int> mp; int n=s.size(); int max_cnt=0; int res=0; for(int i=0, j=0;i<n && j<n; j++){ // for 是最灵活的循环, 用 for 循环实现双指针比较好 mp[s[j]]++; // 如果 s[j] 不存在的话, 会插入 {s[j]:0}, 之后再进行递增 max_cnt=max(max_cnt, mp[s[j]]); // 窗口内维护出现次数最多的字母的出现次数 if(j-i+1-max_cnt>k){ mp[s[i]]--; i++; } res=max(res, j-i+1); } return res; } };