3.无重复字符的最长长度

52 阅读1分钟

思路

1.双指针维护一个滑动窗口

2.左右指针都在同一起始位置(0),右移右指针,遇到重复字符就移动左指针到重复字符(前面)的下一位

3.记录索引窗空长度,返回最大值


代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
    //左指针
    let l = 0;
    //记录长度
    let res = 0;
    //存储无重复的子串
    const map = new Map();
    //r:右指针
    for (let r = 0; r < s.length; r++) {
        if(map.has(s[r]) && map.get(s[r]) >= l){
            l = map.get(s[r]) + 1;
        }
        //找到最大的窗口长度
        res = Math.max(res, r - l + 1);
        map.set(s[r],r);
    
    }

    return res
};

复杂度

时间:O(n):1个for循环

空间: O(n);n:不重复字符的个数