424. Longest Repeating Character Replacement

Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at most k times. Find the length of a longest substring containing all repeating letters you can get after performing the above operations.
Note:
Both the string's length and k will not exceed 104.
Example 1:
Input:
s = "ABAB", k = 2

Output:
4

Explanation:
Replace the two 'A's with two 'B's or vice versa.

Example 2:
Input:
s = "AABABBA", k = 1

Output:
4

Explanation:
Replace the one 'A' in the middle with 'B' and form "AABBBBA".
The substring "BBBB" has the longest repeating letters, which is 4.






https://leetcode.com/problems/longest-repeating-character-replacement/discuss/91285/Sliding-window-similar-to-finding-longest-substring-with-k-distinct-characters

The problem says that we can make at most k changes to the string (any character can be replaced with any other character). So, let's say there were no constraints like the k. Given a string convert it to a string with all same characters with minimal changes. The answer to this is


length of the entire string - number of times of the maximum occurring character in the string


Given this, we can apply the at most k changes constraint and maintain a sliding window such that


(length of substring - number of times of the maximum occurring character in the substring) <= k



class Solution {
    public int characterReplacement(String s, int k) {
        int[] count = new int[26];
        int n = s.length();
        int slow = 0;
        int res = 0;
        int maxCount = 0;
        for(int fast = 0; fast < n; fast++){
            count[s.charAt(fast) - 'A']++;
            maxCount = Math.max(maxCount, count[s.charAt(fast) - 'A']);
            while(fast - slow - maxCount + 1 > k){
                count[s.charAt(slow) - 'A']--;
                maxCount = Math.max(maxCount, count[s.charAt(slow) - 'A']);
                slow++;
                
            }
            res = Math.max(res, fast - slow + 1);
            
        }
        return res;   
    }
}

猜你喜欢

转载自www.cnblogs.com/tobeabetterpig/p/9926911.html