力扣3 无重复的最长子串

10 阅读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
};