424 longest repeating character replacement

https://leetcode.com/problems/longest-repeating-character-replacement/

马甲题,其实就是控制string里面不同的字符不要超过k个的最长substring

这里的思路类似于395

class Solution {
    public int characterReplacement(String s, int k) {
        char[] input = s.toCharArray();
        Set<Character> set = new HashSet<>();
        int ans = 0;
        int n = input.length;
        for (char ch : input) {
            set.add(ch);
        }
        for (char curCh : set) {
            // char curCh = (char)('A' + i);
            int l = 0;
            int diffCnt = 0;
            for (int r = 0; r < n; r++) {
                if (curCh != input[r]) {
                    diffCnt++;
                } 
                while (diffCnt > k) {
                    if (curCh != input[l]) {
                        diffCnt--;
                    }
                    l++;
                }
                ans = Math.max(ans, r - l + 1);
            }
        }
        return ans;
    }
}

你也可以反转一下,这样就不用针对每个char单独查一次了。在每个range里以重复次数最多的char为基础(maxsame),然后要求除此之外的char不能超过k个。

Last updated