划窗法
var lengthOfLongestSubstring = function(s) {
let strSet = new Set();
let l = 0, r = 0, max = 0;
let strArr = s.split('');
let len = strArr.length;
for (let i = 0; i < len; i++) {
if (strSet.has(strArr[i])) { // 遇到重复的字符,记录最大字符子串长度,从set最开始位置删除字符,并移动左下标,重新此次循环判断
max = r-l > max ? r-l : max;
strSet.delete(strArr[l]);
l++;
i--
} else { // 无重复时加入该字符,移动右下标
r++;
strSet.add(strArr[i]);
}
}
max = r-l > max ? r-l : max; // 避免最长子串在末尾情况
return max;
};