Java | Leetcode Java题解之第424题替换后的最长重复字符

题目:

题解:

java 复制代码
public class Solution {

    public int characterReplacement(String s, int k) {
        int len = s.length();
        if (len < 2) {
            return len;
        }

        char[] charArray = s.toCharArray();
        int left = 0;
        int right = 0;

        int res = 0;
        int maxCount = 0;
        int[] freq = new int[26];
        // [left, right) 内最多替换 k 个字符可以得到只有一种字符的子串
        while (right < len){
            freq[charArray[right] - 'A']++;
            // 在这里维护 maxCount,因为每一次右边界读入一个字符,字符频数增加,才会使得 maxCount 增加
            maxCount = Math.max(maxCount, freq[charArray[right] - 'A']);
            right++;

            if (right - left > maxCount + k){
              	// 说明此时 k 不够用
                // 把其它不是最多出现的字符替换以后,都不能填满这个滑动的窗口,这个时候须要考虑左边界向右移动
                // 移出滑动窗口的时候,频数数组须要相应地做减法
                freq[charArray[left] - 'A']--;
                left++;
            }
            res = Math.max(res, right - left);
        }
        return res;
    }
}
相关推荐
听风吟丶几秒前
Java HashMap 深度解析:从底层结构到性能优化实战
java·开发语言·性能优化
KakiNakajima2 分钟前
浅谈幂等性基本实现原理【kaki备忘录】
java
柯南二号3 分钟前
【后端】【Java】一文详解Spring Boot RESTful 接口统一返回与异常处理实践
java·spring boot·状态模式·restful
南龙大魔王6 分钟前
spring ai Alibaba(SAA)学习(二)
java·人工智能·spring boot·学习·ai
ZBritney7 分钟前
JAVA中的异常二
java·开发语言
汤姆yu12 分钟前
基于springboot的运动服服饰销售购买商城系统
java·spring boot·后端
柯南二号16 分钟前
【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发
java·spring boot·restful
Jul1en_17 分钟前
【Spring】实现验证码功能
java·后端·spring
〝七夜56921 分钟前
Jsp中动态include和静态include的区别
java·开发语言
努力进修26 分钟前
【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战
java·开发语言·java-ee