算法挑战38: 无重复字符的最长字串

5 阅读1分钟

题目:

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

思路:

滑动窗口, 用一个哈希表来存字串中的字符的出现次数, 如果次数大于1,就说明重复了,就缩小字串长度,left++, 然后更新满足条件的字串最大值, 然后right++,扩大字串,如果满足条件就更新答案,并继续扩大, 不满足了再缩小

代码:

var lengthOfLongestSubstring = function (s) {
    let map = new Map();//哈希
    let ans = 0;
    let left = 0;
    
    for (let right = 0; right < s.length; right++) {
        const x = s[right];
        map.set(x, map.get(x) + 1 || 1);
        //有重复字符, 就缩小字串,直到无重复的字符
        while (map.get(x) > 1) {
            const y = s[left];
            map.set(y, map.get(y) - 1 || 0);
            left++;
        }
        ans = Math.max(ans, right - left + 1);
    }
    return ans;
};