3. 无重复字符的最长子串(中)

题目

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

示例 1:

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

题解:滑动窗口

  • 思路:使用js的Set存不重复的子串,左右指针刚开始指向字符串开头,右指针逐个往后移,当右指针的元素不在Set中就加入,并更新最大长度;如果右指针的元素在Set中:在Set中移除i的元素,i++,一直到j所指的元素可以放进Set。
var lengthOfLongestSubstring = function(s) {
    if (s.length === 0) {
        return 0;
    }
    let max = 0;
    let i = 0; // 左指针
    let j = 0; // 右指针
    const charSet = new Set(); // 用于存储当前窗口的字符
    while (j < s.length) {
        if (!charSet.has(s[j])) {
            // 当前字符不在窗口内,移动 j 指针
            charSet.add(s[j]);//添加元素到窗口
            max = Math.max(max, j - i + 1); // 更新最大长度
            j++;
        } else {
            // 当前字符在窗口内,删除i指针的元素,直到j指针元素可以放进窗口内
            charSet.delete(s[i]);
            i++;//移动 i 指针
        }
    }
    return max;
};
posted @ 2024-10-28 14:37  Frommoon  阅读(12)  评论(0编辑  收藏  举报