var lengthOfLongestSubstring = function (s) {
// !本题采用滑动窗口 + 哈希表的方法解决
// 定义滑动窗口,这个滑动窗口是一个哈希表,哈希表的键:单个字符 值:该字符出现的次数
const window = new Map();
// 定义左指针
let left = 0;
// 定义右指针
let right = 0;
// 定义不重复子串的最大长度
let res = 0;
// 右指针小于字符串的长度的时候,是进入循环的条件
while (right < s.length) {
// 因为我们移动的是右指针,所以要先判断哈希表中是否含有右指针指向的元素
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,然后左指针右移,直到出现重复的那个元素不再重复
window.set(s[left],window.get(s[left]) - 1);
left++;
}
right++;
res = Math.max(res,right - left);
}
return res;
};