给一个字符串,可以删除最多k个字符,求删除后的最长连续相同字符的子串
外层end遍历,找到当前start ~ end的占多数的字符有多少个,然后调整start,update最大长度
public class Solution {
public int characterReplacement(String s, int k) {
// 最大子字符串长度
int maxLen = 0;
// start ~ end 子串之中数量最多的字符有多少个
int maxCount = 0;
int start = 0;
int[] count = new int[26];
// 遍历end
for (int end = 0; end < s.length(); end++) {
// 若当前 maxLen 不满足要求,那么子串右移即可,不需要缩减子串长度,因为我们求 maxLen
maxCount = Math.max(maxCount, ++count[s.charAt(end) - 'A']);
// 移动start直到满足要求
while (end - start + 1 - maxCount > k) {
count[s.charAt(start) - 'A']--;
start++;
}
maxLen = Math.max(maxLen, end - start + 1);
}
return maxLen;
}
}