这道题的重点是:
- 根据当下substring在最常出现letter之外的空位数是否大于K 来slide window。
right 不断地increment 可用for loop 也可以 increment right。
(right - left + 1 是因为表示当下的长度, array idx小一位的。)
class Solution {
public int characterReplacement(String s, int k) {
if(s.length() == 0){
return 0;
}
int res = 0;
int[] arr = new int[26];
int left = 0;
int maxCount = 0;
for(int right = 0; right < s.length(); right++){
int idx = s.charAt(right)-'A'; arr[idx]++;
maxCount = Math.max(maxCount, arr[idx] ); // Find Maximum count ::
if ((right - left - maxCount + 1 )>k){
arr[ s.charAt(left)-'A' ]--;
left++;
}else{
res= Math.max(res, right - left + 1); //right 一直不断在increment
}
}
return res;
}
}
Time Complexity: O(n)
Space Complexity: O(1)