2024. 考试的最大困扰度

晚上不睡,白天崩溃。昨天周末去大学看发现9.1号刚好碰上新生入学了!

题目

LC每日一题,参考2024. 考试的最大困扰度 - 力扣(LeetCode)
,难度分1643 中等。

解题思路

  • 滑动窗口:考虑过动态规划发现无法关联连续相同字符,想到贪心发现替换肯定是连续的不会分隔的肯定需要使用滑动窗口,关键点是怎么定义窗口范围,找规律可以发现如果窗口包含的两种字符数量有一种小于等于k则可把其全部替换为该字符满足题目条件可以计算为一个临时答案。

滑动窗口 9ms 94.38%

class Solution {
    public int maxConsecutiveAnswers(String answerKey, int k) {
        char[] cs = answerKey.toCharArray();
        int n = cs.length, res = 0;
        // 参考滑动窗口解法
        int l = 0, r = 0;// 窗口先增加r右指针,如果不满足min(tN,fN)<=k则l增加左指针开始右移
        int tN = 0, fN = 0; // 窗口当前F、N的数量
        while (r < n) { // 右指针遍历
            if(cs[r] == 'T') {
                tN++;
            } else {
                fN++;
            }
            while (l < r && tN > k && fN > k) { // 开始减小窗口 左指针右移动
                if (cs[l] == 'T') {
                    tN--;
                } else {
                    fN--;
                }
                l++;
            }
            res = Math.max(res, r - l + 1);// 当前窗口满足条件 计算一个备选结果
            r++;
        }
        return res;
    }
}

复杂度分析

  • 时间复杂度:O(n),左右指针都最多遍历字符串一次,n 为字符串长度。
  • 空间复杂度:O(1),只使用了常量个变量空间。

2024-9-2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容