Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at most k times. Find the length of a longest substring containing all repeating letters you can get after performing the above operations.
Note:
Both the string's length and k will not exceed 104.
Example 1:
Input: s = "ABAB", k = 2 Output: 4 Explanation: Replace the two 'A's with two 'B's or vice versa.
Example 2:
Input: s = "AABABBA", k = 1 Output: 4 Explanation: Replace the one 'A' in the middle with 'B' and form "AABBBBA". The substring "BBBB" has the longest repeating letters, which is 4.
窗口指针状态的更新和题意的结合:
count = Math.max(count, ++sum[s.charAt(fast) - 'A']);
while (fast - slow + 1 - count > k) {
sum[s.charAt(slow) - 'A']--;
slow++;
}
public int characterReplacement(String s, int k) {
if (s == null || s.length() == 0) {
return 0;
}
int[] sum = new int[26];
int slow = 0, fast = 0, count = 1, ans = 1;
while (fast < s.length()) {
count = Math.max(count, ++sum[s.charAt(fast) - 'A']);
while (fast - slow + 1 - count > k) {
sum[s.charAt(slow) - 'A']--;
slow++;
}
ans = Math.max(ans, fast - slow + 1);
fast++;
}
return ans;
}