无重复字符的最长串

84 阅读1分钟

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度

示例

输入:s = 'abcabcbb'
输出:3
最长子串是abc

解题方法一:滑动窗口

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let maxL = 0; // 最大长度
    let occ = new Set(); // hash
    let rk =  0; // 右指针
    for (let i = 0; i < s.length; i ++) {
        // 滑块左侧往右移动
        if (i != 0) {
            occ.delete(s.charAt(i-1));
        }
        // 只要没重复,有指针一直往右偏移
        while (rk < s.length && !occ.has(s.charAt(rk))) {
            occ.add(s.charAt(rk));
            rk++;
        }
        maxL = Math.max(maxL, occ.size)
    }
    return maxL;
};