Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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<Character, Integer> 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<Character, Integer> 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<Character, Integer> 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment