function lengthOfLongestSubstring(s) {
// 利用滑动窗口的思路
let window = new Map(); // 保存进入窗口的字符 其中 key 为字符 value 为该字符的下标
let res = 0; // 初始化结果
// 声明 l r 分别为窗口的左右指针
for (let l = 0, r = 0; r < s.length; r++) {
// 如果窗口中已经存在该字符 则更新 l
if (window.has(s[r])) {
l = Math.max(window.get(s[r]) + 1, l);
}
// 如果不存在则 更新结果
res = Math.max(res, lr - l + 1);
// 且保存字符及其下标到窗口内
window.set(s[r], r);
}
// 遍历完成后返回结果
return res;
}