无重复字符的最长子串


1.题目描述

2.思路:

右指针在往右滑的过程中,如果满足条件,就一直滑
一旦右指针不满足条件,则滑动左指针,直到右指针满足条件可以继续滑
这个过程中,左右指针之间的距离忽大忽小,在这个过程中就能得到最大长度
视频讲解 1
视频讲解 2

3.代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
// 用于存储当前窗口中的字符
const charSet = new Set();
// 窗口左指针
let left = 0;
// 最长子串长度
let maxLength = 0;

for (let right = 0; right < s.length; right++) {
while (charSet.has(s[right])) {
// 移动左指针,移除左侧重复的字符
charSet.delete(s[left]);
// 重复此步骤直到右指针所在的字符不在子串当中
left++;
}
charSet.add(s[right]);
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength;
};