题目:给出一字符串,找其无重复字符的最长子串的长度
滑动窗口法
- 从第一个字符开始,找出没有重复字符的子串s1,此时max等于s1的长度
- 从第二个字符开始,找出没有重复字符的子串s2,比较s2的长度和max,更新max的值
- 依次类推,直到最后一个字符
过程如下:
以“pwwkew”为例
1.(pw)wkew
2.p(w)wkew
3.pw(wke)w
4.pww(kew)
5.pwwk(ew)
6.pwwke(w)
代码实现
var lengthOfLongestSubstring = function(s) {
var occ = new Set(); //哈希表
var right = -1; //记右边界
var max = 0; //记最长子串的长度
for(var i = 0; i < s.length; i++){
//左指针移动,移除一个字符
i && occ.delete(s.charAt(i - 1));
//如果字符串还没有遍历完,且该字符不在哈希表中
while(right + 1 < s.length && !occ.has(s.charAt(right + 1))){
occ.add(s.charAt(right + 1));
++right;
}
max = Math.max(max, right - i + 1); //更新子串的最长长度
}
return max;
};