「LeetCode打卡」03.无重复字符的最长子串

76 阅读1分钟

🍑 题目详情

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

难度:⭐️⭐️

示例 1:

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

示例 2:

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

示例 3:

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

🍭 解题思路

滑动窗口

滑动窗口适合解决连续字符串一类的问题,那么什么是“滑动窗口”?

其实就是一个管理连续元素的队列,根据不同的条件去添加右侧的元素、移出左侧的元素。

03.jpg

🍼 解题代码

var lengthOfLongestSubstring = function(s) {
    let left = 0, right = 0;
    // 滑动窗口
    const slid = new Set()
    // 最长长度
    let maxLength = 0

    while (left < s.length) {
        if (!slid.has(s.charAt(right)) && right < s.length) {
            slid.add(s.charAt(right))
            right ++
        } else {
            maxLength = Math.max(slid.size, maxLength);
            slid.delete(s.charAt(left))
            left ++
        }
    }
    return maxLength
};