424. Longest Repeating Character Replacement (ref to 1004

T: O(n)

S: O(1)

class Solution {
    public int characterReplacement(String s, int k) {
        int[] charCount = new int[26]; // all uppercase , use int array to save count
        int left = 0;
        int right = 0;
        int maxCount = 0;
        int result = 0;
        
        while (right < s.length()) {
            charCount[s.charAt(right) - 'A']++;
            maxCount = Math.max(maxCount, charCount[s.charAt(right) - 'A']); // get maximum count
            right++;
            while (right - left - maxCount > k) {
                charCount[s.charAt(left) - 'A']--;
                left++;
            }
            result = Math.max(result, right - left);
        }
        return result;
    }
}

/*
count max char

AABABBA
l
   r -> cal max
  l
      r -> cal
     l  
       r -> shrink left
 
 right - left - max > 1 -> not fit, shrink left
 
 
 right - left - max <= k -> fit result, cal
*/

Last updated