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

1
2
3
4
5
6
7
8
9
10
11
/*
Sliding Window 滑动窗口

1. 创建一个set
2. 创建两个指针,
一个指向字符串的开头 -j
另一个随着循环遍历字符串 -i
3. 如果set中没有s[i],说明目前为止还没有重复的字符,同时将s[i]添加到set中,更新最大不重复字符串的数量
4. 如果有,则从set中删除s[j],同时递增j,再次检查是否有s[i] 直到没有为止
5. 重复步骤3,4 直至字符串遍历结束
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var lengthOfLongestSubstring = function(s) {
const set = new Set()
let i = 0;
let j = 0;
let maxLength = 0;
let length = s.length
if(!length) return 0

for(i; i < length; i++){
if(!set.has(s[i])){
// 没有重复字符串
set.add(s[i])
maxLength = Math.max(maxLength,set.size)
}else{
// 有重复字符,删除一位,j递增,重复到无重复字符为止
while(set.has(s[i])){
set.delete(s[j])
j++
}
set.add(s[i])
}
}

return maxLength
};