var lengthOfLongestSubstring = function(s) {
// 本题采用滑动窗口 + 双指针的方法
// 定义左指针
let left = 0;
// 定义右指针
let right = 0;
// 定义最大值
let res = 0;
// 定义滑动窗口(哈希表)
let window = new Map();
// 循环结束条件是 右指针走到了最右边
while (right < s.length) {
// 判断右指针指向的元素,是否在哈希表中,在则+1,不在则添加进去
if (window.has(s[right])) {
window.set(s[right],window.get(s[right]) + 1);
} else {
window.set(s[right],1);
}
// 判断右指针指向的元素,是否出现了重复
while (window.get(s[right]) > 1) {
// 当右指针指向的元素出现了两次,说明重复了,左指针指向的元素在哈希表中的值-1,然后左指针右移
// 之所以 -1 之后再右移,根本原因在于防止左边的元素重复出现
window.set(s[left],window.get(s[left]) -1);
left++;
}
// 指针右移,不断更新最大值
right++;
res = Math.max(res,right - left);
}
return res;
};
复制代码