longest-repeating-character-replacement(难)

用sliding window的方法,之前还有个k不同元素好像也是类似的思路。有时间可以去复习下。

复制代码
https://leetcode.com/problems/longest-repeating-character-replacement/

// sliding window

public class Solution {
    public int characterReplacement(String s, int k) {

        int[] count = new int[26];
        
        int maxch = -1; // the char with max count in current substr
        int max = 0; // the max count for single char in current substr
        int len = 0; // current substr length
        int ret = 0; // final result

        for (int i=0; i<s.length(); i++) {
            int tmp = s.charAt(i) - 'A';
            count[tmp]++;
            len++;

            if (maxch == tmp) {
                max++;
            }
            else {
                if (count[tmp] > max) {
                    max = count[tmp];
                    maxch = tmp;
                }
            }

            if (len - max <= k) {
                if (len > ret) {
                    ret = len;
                }
            }

            while (len - max > k) {
                int newTmp = s.charAt(i-len+1) - 'A';
                count[newTmp]--;
                len--;
                if (maxch == newTmp) {
                    max--;
                    for (int j=0; j<26; j++) {
                        if (count[j] > max) {
                            max = count[j];
                            maxch = j;
                        }
                    }
                }
            }
        }
        return ret;
    }
}
复制代码

 

posted @   blcblc  阅读(960)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示