CCCPaste

Longest Repeating Character Replacement - Lee...

// Longest Repeating Character Replacement - https://leetcode.com/problems/longest-repeating-character-replacement/description/


class Solution {

    // Brute Force
    // Time Complexity: O(n^2)
    // Space Complexity: O(m) where m is number of letters in alphabet (26)
    // public int characterReplacement(String s, int k) {
    //     int maxLength = 0;

    //     for (int i = 0; i < s.length(); i++) {
    //         Map freq = new HashMap<>();
    //         int maxF = 0;
    //         for (int j = i; j < s.length(); j++) {
    //             char c = s.charAt(j);
    //             freq.put(c, freq.getOrDefault(c, 0) + 1);
    //             maxF = Math.max(maxF, freq.get(c));
                
    //             // len of current substring - count of most frequent character
    //             if((j - i + 1) - maxF <= k) {
    //                 maxLength = Math.max(maxLength, (j - i + 1));
    //             }
    //         }
    //     }

    //     return maxLength;
        
    // }

    // Sliding Window
    // Time Complexity: O(26.n) ~ O(n)
    // Space Complexity: O(26) ~ O(1)
    // public int characterReplacement(String s, int k) {
    //     int maxLength = 0;
    //     int l = 0;
    //     Map freq = new HashMap<>();
    //     for (int r = 0; r < s.length(); r++) {
    //         char c = s.charAt(r);
    //         freq.put(c, freq.getOrDefault(c, 0) + 1);
    //         int maxF = Collections.max(freq.values());
    //         int lenOfWindow = r - l + 1;
    //         if(lenOfWindow - maxF <= k) {
    //             maxLength = Math.max(maxLength, lenOfWindow);
    //         } else {
    //             while(lenOfWindow - maxF > k) {
    //                 char leftChar = s.charAt(l); 
    //                 freq.put(leftChar, freq.get(leftChar) - 1);
    //                 l++;
    //                 lenOfWindow--;
    //             }
    //         }
    //     }

    //     return maxLength;
    // }


    // Sliding Window (Optimised)
    // Time Complexity: O(n) 
    // Space Complexity: O(26) ~ O(1)
    public int characterReplacement(String s, int k) {
        int maxLength = 0;
        int l = 0;
        Map freq = new HashMap<>();
        int maxF = 0;
        for (int r = 0; r < s.length(); r++) {
            char c = s.charAt(r);
            freq.put(c, freq.getOrDefault(c, 0) + 1);
            maxF = Math.max(maxF, freq.get(c));

            while((r - l + 1) - maxF > k) {
                char leftChar = s.charAt(l); 
                freq.put(leftChar, freq.get(leftChar) - 1);
                l++;
            }
            maxLength = Math.max(maxLength, (r - l + 1));
        }

        return maxLength;
    }
}