3. 无重复字符的最长子串

滑动窗口

解题思路

  1. 定义变量 maxLen 表示最大长度,定义一个 map 用来存储出现过的字符和该字符的索引;

  2. 使用双指针 leftright 截取不含重复字符的子串;

    • leftright 初始值都是 0right 不断右移,不断将 right 位置的字符放到 map 中;
    • 如果存在重复字母,left 直接移动到重复字母的索引位置+1(只取索引大于 left 的重复字母的索引);
    • 如果不存在重复字母 right 不断右移,计算子串长度 right - left + 1,保留较大值到 maxLen

复杂度:

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

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

代码实现

var lengthOfLongestSubstring = function (s) {
    let map = new Map();
    let left = 0, right = 0, maxLen = 0;

    while (right < s.length) {
        let letter = s[right];
        if (map.has(letter)) {
            let inx = map.get(letter) + 1;
            left = left > inx ? left : inx;
        }

        map.set(letter, right);
        maxLen = Math.max(maxLen, right - left + 1);
        right++;
    }

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

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

粽子

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

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

了解更多

目录

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