码迷,mamicode.com
首页 > 其他好文 > 详细

替换后的最长重复字符

时间:2021-02-16 11:52:05      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:err   ace   rac   一个   不能   执行   solution   --   子串   

替换后的最长重复字符

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,

总共可最多替换 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) {
        int len = s.length();
        if(len < 2) return len;

        char[] cc = s.toCharArray();
        int left=0,right=0;
        int res=0;
        int maxCount = 0;
        int[] freq = new int[26];   //记录单词出现的频数

        while(right < len){
            freq[cc[right] - ‘A‘]++;   //当前单词频数+1
            // 维护maxCount,每次右边界移动的时候,此次相同字符的频数就会+1  
            
            maxCount = Math.max(maxCount,freq[cc[right] - ‘A‘]);
            right++;   //右边界持续前进
            
            if(right - left > maxCount + k){   //此时的k根本不够用 
                // 频数数组做减法
                freq[cc[left] - ‘A‘]--;
                // 其他不是最多出现的字符替换以后,不能填满这个滑动窗口,左边界右移
                left++;
            }
            res = Math.max(res,right - left);
        }
        return res;

    }
}

替换后的最长重复字符

标签:err   ace   rac   一个   不能   执行   solution   --   子串   

原文地址:https://www.cnblogs.com/xiaofff/p/14398523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!