MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

Java实现 LeetCode 424 替换后的最长重复字符

424. 替换后的最长重复字符

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

注意:
字符串长度 和 k 不会超过 104。

示例 1:

输入:
s = “ABAB”, k = 2

输出:
4

解释:
用两个’A’替换为两个’B’,反之亦然。
示例 2:

输入:
s = “AABABBA”, k = 1

输出:
4

解释:
将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。
子串 “BBBB” 有最长重复字母, 答案为 4。

class Solution {
     public int characterReplacement(String s, int k) {
        char[] chars = s.toCharArray();
        int width = 0;
        for (int left = 0, right = 0, counts[] = new int[26]; right < chars.length; right++) {
            width = Math.max(width, ++counts[chars[right] - 'A'] + k);
            while (right - left + 1 > width)
                counts[chars[left++] - 'A']--;
        }
        return Math.min(chars.length, width);
    }
}

posted on 2020-03-15 20:54  MarcusV  阅读(17)  评论(0编辑  收藏  举报