LeetCode:424. 替换后的最长重复字符
字节笔试第一题
双指针, 有点新颖, 使用 map 数组维护最多出现的元素, 然后查看是否超出了 k 个
AC Code
class Solution {
public int characterReplacement(String s, int k) {
char[] cs = s.toCharArray();
int len = cs.length;
int left = 0, right = 0;
int[] map = new int[26];
int ans = 0, mx = 0;
while(right < len) {
int cnt = ++map[cs[right] - 'A'];
mx = Math.max(cnt, mx);
// right - left + 1 区间的元素个数
int dis = (right - left + 1);
// mx 最多相同的
// 相减剩下的就是要替换的次数
if(dis - mx > k) {
map[cs[left] - 'A']--;
left++;
}
right++;
// ans = Math.max(ans, right - left);
}
// return ans;
return right - left;
}
}