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

滑动窗口

解题思路

  1. 看到这个题目时,可能会想着如何将某一序列里的一些元素替换成相同元素,然后再求得窗口长度,这样想会掉入陷阱,考虑的情况特别多

  2. 解题思路和其他的滑动窗口一样,只是这个收缩左侧窗口的条件变成了 maxSame + k < right - left + 1;

    • 说明窗口内的元素数量大于了 最大相同元素个数 + k 的总和;
    • 此时需要收缩左侧窗口,求出 maxSame + k === right - left + 1

复杂度

  1. 时间复杂度:O(N)

  2. 空间复杂度:O(1)

代码实现

var characterReplacement = function (s, k) {
    // 1. 定义 hash 数组
    const hash = new Array(26).fill(0);
    const asset = 'A'.charCodeAt(0); // 偏移量
    let maxSame = 0;
    let len = s.length;
    let left = 0;
    let right = 0;

    while (right < len) {
        // 2. 增大窗口大小
        const inx = s.charCodeAt(right) - asset;
        hash[inx]++;
        maxSame = Math.max(maxSame, hash[inx]);

        //不符合情况时,缩小窗口
        if (maxSame + k < right - left + 1) {
            hash[s.charCodeAt(left) - asset]--;
            left++;
        }
        right++;
    }

    return right - left;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 滑动窗口
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现