Longest Repeating Character Replacement
给一个字符串, 可以替换k个字符, 求替换后最长的reapting character.
这题有点难度, 需要双指针滑窗, 当找到满足的后, start应该++.
class Solution {
public int characterReplacement(String s, int k) {
int start = 0;
int end = 0;
char max = s.charAt(0);
int curMax = 0;
int len = s.length();
int res = 0;
int flip = 0;
int sameLetter = 0;
Map<Character, Integer> map = new HashMap<>();
while (start < len - k) {
while (end < len && flip <= k) {
char c = s.charAt(end);
Integer value = map.get(c);
if (value == null) {
map.put(c, 1);
} else {
map.put(c, value + 1);
}
value = map.get(c);
if (value > sameLetter) {
max = c;
sameLetter = value;
}
flip = end - start + 1 - sameLetter;
if (flip <= k) {
curMax = Math.max(curMax, end - start + 1);
}
end++;
}
res = Math.max(res, curMax);
char remove = s.charAt(start);
Integer i = map.get(remove);
map.put(remove, i - 1);
start++; // aaabb
flip=0;
}
return res;
}
}