titan2400

Longest Repeating Character Replacement - LeetCode

Nov 11th, 2025
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | Source Code | 0 0
  1. // Longest Repeating Character Replacement - https://leetcode.com/problems/longest-repeating-character-replacement/description/
  2.  
  3.  
  4. class Solution {
  5.  
  6.     // Brute Force
  7.     // Time Complexity: O(n^2)
  8.     // Space Complexity: O(m) where m is number of letters in alphabet (26)
  9.     // public int characterReplacement(String s, int k) {
  10.     //     int maxLength = 0;
  11.  
  12.     //     for (int i = 0; i < s.length(); i++) {
  13.     //         Map<Character, Integer> freq = new HashMap<>();
  14.     //         int maxF = 0;
  15.     //         for (int j = i; j < s.length(); j++) {
  16.     //             char c = s.charAt(j);
  17.     //             freq.put(c, freq.getOrDefault(c, 0) + 1);
  18.     //             maxF = Math.max(maxF, freq.get(c));
  19.                
  20.     //             // len of current substring - count of most frequent character
  21.     //             if((j - i + 1) - maxF <= k) {
  22.     //                 maxLength = Math.max(maxLength, (j - i + 1));
  23.     //             }
  24.     //         }
  25.     //     }
  26.  
  27.     //     return maxLength;
  28.        
  29.     // }
  30.  
  31.     // Sliding Window
  32.     // Time Complexity: O(26.n) ~ O(n)
  33.     // Space Complexity: O(26) ~ O(1)
  34.     // public int characterReplacement(String s, int k) {
  35.     //     int maxLength = 0;
  36.     //     int l = 0;
  37.     //     Map<Character, Integer> freq = new HashMap<>();
  38.     //     for (int r = 0; r < s.length(); r++) {
  39.     //         char c = s.charAt(r);
  40.     //         freq.put(c, freq.getOrDefault(c, 0) + 1);
  41.     //         int maxF = Collections.max(freq.values());
  42.     //         int lenOfWindow = r - l + 1;
  43.     //         if(lenOfWindow - maxF <= k) {
  44.     //             maxLength = Math.max(maxLength, lenOfWindow);
  45.     //         } else {
  46.     //             while(lenOfWindow - maxF > k) {
  47.     //                 char leftChar = s.charAt(l);
  48.     //                 freq.put(leftChar, freq.get(leftChar) - 1);
  49.     //                 l++;
  50.     //                 lenOfWindow--;
  51.     //             }
  52.     //         }
  53.     //     }
  54.  
  55.     //     return maxLength;
  56.     // }
  57.  
  58.  
  59.     // Sliding Window (Optimised)
  60.     // Time Complexity: O(n)
  61.     // Space Complexity: O(26) ~ O(1)
  62.     public int characterReplacement(String s, int k) {
  63.         int maxLength = 0;
  64.         int l = 0;
  65.         Map<Character, Integer> freq = new HashMap<>();
  66.         int maxF = 0;
  67.         for (int r = 0; r < s.length(); r++) {
  68.             char c = s.charAt(r);
  69.             freq.put(c, freq.getOrDefault(c, 0) + 1);
  70.             maxF = Math.max(maxF, freq.get(c));
  71.  
  72.             while((r - l + 1) - maxF > k) {
  73.                 char leftChar = s.charAt(l);
  74.                 freq.put(leftChar, freq.get(leftChar) - 1);
  75.                 l++;
  76.             }
  77.             maxLength = Math.max(maxLength, (r - l + 1));
  78.         }
  79.  
  80.         return maxLength;
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment