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; } }
424. Longest Repeating Character Replacement
猜你喜欢
转载自www.cnblogs.com/tobeabetterpig/p/9926911.html
今日推荐
周排行