LeetCode 424. 替换后的最长重复字符
424. 替换后的最长重复字符
解题思路:
采用双指针(尺取)法。首先用一个数组cnt
记录区间[l,r]
内每个字符出现的次数。该区间所有字符出现的次数sum = r - l + 1
,我们找出这个区间字符出现的最大次数max_cnt
,那么sum - max_cnt
就是这个区间内我们可以替换字符的最小次数,如果sum - max_cnt <= k
说明该区间满足条件,我们更新区间长度的最大值。如果sum - max_cnt > k
说明不满足条件,我们通过移动指针l来找到满足条件的区间。
代码:
class Solution {
public:
int characterReplacement(string s, int k) {
int len = s.size(), ans = 0;
int r = 0, l = 0, max_cnt = 0;
vector<int> cnt(26, 0);
while(r < len) {
int cur = s[r] - 'A';
++cnt[cur];
max_cnt = max(max_cnt, cnt[cur]);
while (r - l + 1 - max_cnt > k) {
int del = s[l] - 'A';
--cnt[del];
l++;
}
ans = max(ans, r - l + 1);
r++;
}
return ans;
}
};