双指针滑动窗口,
1.首先左指针指向最左边第一个元素,
2.右指针查找子串,使用set来保存子串,当字串遇到相同元素时候,退出。
3.计算左指针 与 右指针的距离 获取当前子串的长度值
4.删除字串中第一个元素,直到 右指针 匹配字串里面没有重复值,也就是上一次的子串,需要完全不存在当前右指针指向的值与之重复。
var lengthOfLongestSubstring = function(s) {
var left = 0, right =0;
var max = 0;
var n = s.length;
var setMap = new Set()
for(;left<n;left++){
//持续移除窗口 ,直到建立一个新的窗口
if(left>0){
setMap.delete(s[left-1])
}
//右指针持续向右移动,查找子串并把字串插入set, 直到遇到字串里相同元素退出
while(right < n && !setMap.has(s[right])){
setMap.add(s[right])
right++
}
//右指针找到了字串相同的元素退出,此时要获取当前字串的最大值
max = Math.max(max,right - left)
}
return max
};