#前端算法救赎系列#LeetCode03.无重复字符的最长子串

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

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

示例 1:

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

示例 3:

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

思路分析:

滑动窗口:滑动窗口不断向前,当前元素不在set中 就加入set 然后更新最大长度,继续下一轮循环。若当前元素已在set中,set中有重复元素,则元素直到滑动窗口内没有重复的元素

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let left=0,right
    let set=new Set()
    let len=s.length
    let size=0
    for(let right=0;right<len;right++){
        if(!set.has(s[right])){
            set.add(s[right])
            size=Math.max(size,set.size)
        }else {
            while(set.has(s[right])){
                set.delete(s[left])
                left++
            }
            set.add(s[right])
        }
    }
    return size
};

思路来源:全栈潇晨

https://leetcode.cn/problems/longest-substring-without-repeating-characters/solution/3-wu-zhong-fu-zi-fu-de-zui-chang-zi-chua-b6ex/

posted @ 2022-08-26 09:54  Lu西西  阅读(33)  评论(0)    收藏  举报