链接
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
滑动窗口 + 哈希集合
伪代码:
(1)用left、right界定滑动窗口,使得滑动窗口中的序列片段不含有重复字符串
(2)由1得,初始状态为 left = right = 0,终止状态为 right = s.length-1
(3)结合题意,该滑窗移动方式是 一格一格移动
(4)可以使用数据结构 Set 来判断滑窗序列中是否有 重复字符
因此,代码如下:
var lengthOfLongestSubstring = function(s) {
if(!s.length) return 0;
let left = 0, right = 0;
let set = new Set();
let max = -1;
while(right < s.length) {
if(set.has(s.charAt(right))) {
set.delete(s.charAt(left));
left++;
}
else {
set.add(s.charAt(right));
max = Math.max(max, right - left +1);
right++;
}
}
return max;
};
拓展:若允许重复1次呢