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

24 阅读1分钟

leetcode-3.png

要找到最长的无重复子串,那就需要一个容器来记录当前的子串,判断是否重复,如果重复,那就寻找下一处,按照这个思路,我们可以使用map来存储当前的字符以及索引,然后再次碰到该字符时,就更新索引,达到目的。

var lengthOfLongestSubstring = function (s) {
    let hash = new Map()
    let max = 0
    let start = 0
    for (let i = 0; i < s.length; ++i) {
        if (hash.has(s[i])) {
            // 已经存在当前字符,那就更新起始处
            // 更新到当前字符的下一位置
            start = Math.max(start, hash.get(s[i]) + 1)
        }
        // 存储当前字符索引
        hash.set(s[i], i)
        // 计算长子串
        max = Math.max(i - start + 1, max)
    }
    return max
};