力扣3 无重复字符的最长子串

18 阅读1分钟

思路:
这道题要找到给定字符串的最长子串的长度
首先想到双指针,需要二重循环和字符字典
进一步记录左指针的下标可以省略一个循环

代码:
首先右指针遍历整个字符串
最大长度是左右指针之间的距离
要满足无重复,所以左指针是出现位置的下一位
字符字典要记录出现位置

var lengthOfLongestSubstring = function (s) {
    let len = s.length
    let maxLen = 0
    let left = 0
    let lastSeen = {}
    let c = ''
    for (let right = 0; right < len; right++) {
        c = s[right]
        if (lastSeen[c] !== undefined && lastSeen[c] >= left) {
            left = lastSeen[c] + 1
        }
        lastSeen[c] = right
        maxLen = Math.max(maxLen, right - left + 1)
    }
    return maxLen
};