Friday, August 21, 2020

LeetCode [424] Longest Repeating Character Replacement

 424. Longest Repeating Character Replacement

Medium

Given a string s that consists of only uppercase English letters, you can perform at most k operations on that string.

In one operation, you can choose any character of the string and change it to any other uppercase English character.

Find the length of the longest sub-string 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.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public int characterReplacement(String s, int k) {
        int len = s.length();
        int[] count = new int[26];
        int start = 0, maxCount = 0, maxLength = 0;
        for (int end = 0; end < len; end++) {
            //maxCount is a historic max count, not a realtime value.
            //at certain step, maxCount can be less that the real max count over all chars. 
            //in this case, we do not update maxLength for a greater value because (maxLength=maxCount+k)
            //the array count records the realtime char count. only update maxCount when a greater value is found
            //ie., when maxCount is updated, the sliding window [start..end] does have maxCount of the same char. 
            //therefore, the condition(maxLength == maxCount+k) holds
            maxCount = Math.max(maxCount, ++count[s.charAt(end) - 'A']);
            while (end - start + 1 - maxCount > k) {
                count[s.charAt(start) - 'A']--;
                start++;
            }
            maxLength = Math.max(maxLength, end - start + 1);
        }
        return maxLength;
    }
}

No comments:

Post a Comment