🍑 题目详情
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
难度:⭐️⭐️
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
🍭 解题思路
滑动窗口
滑动窗口适合解决连续字符串一类的问题,那么什么是“滑动窗口”?
其实就是一个管理连续元素的队列,根据不同的条件去添加右侧的元素、移出左侧的元素。
🍼 解题代码
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
};