/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
const set = new Set();
// right,left 滑动窗口右、左边界
let right = left = maxLength = 0;
if (s.length === 0) {
return 0;
}
for (right; right < s.length; right++) {
// 当前元素不在set中,就加入set,然后更新最大长度
if (!set.has(s[right])) {
set.add(s[right]);
maxLength = Math.max(maxLength, set.size);
} else {
// 有重复元素则不断让left++
// 并删除窗口之间的元素
while (set.has(s[right])) {
set.delete(s[left]);
left++;
}
set.add(s[right]);
}
}
return maxLength;
// let left = right = length = maxLength = 0
// let set = new Set()
// // 循环结束条件:右指针小于字符串最大长度
// while (right < s.length) {
// // 如果set中没有这个值 加入+长度+1+置换最大chang
// if (!set.has(s[right])) {
// set.add(s[right])
// length++
// if (length > maxLength) {
// maxLength = length
// }
// right++;
// } else {
// // 如果遇到有一样的值,删除set中的值,长度-1
// while (set.has(s[right])) {
// set.delete[s[left]]
// left++
// length--
// }
// set.add(s[right])
// length++
// right++
// }
// }
// return maxLength
};