题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
okkjoo-leetcodeHot-byJs
带你用 JS 刷高频面试算法题~还有各种常用、常考手写, 最近还加了自己实现的流行库的mini版本合集仓库:okkjoo-leetcodeHot-byJs欢迎 star⭐
解题思路
无重复+最长子串——看到这两个个关键字你就要想到滑动窗口,那么这道题就是窗口大小无限制的滑动窗口~ 滑动窗口具体控制就是双指针啦
然后需要求得的就是 满足条件(不含重复字符)的窗口中,最大的窗口。
- 用一个 set 存储窗口内的元素
- 当窗口内没有重复字符时就不断地向右边扩张新的右边界字符存入 set
- 出现重复后就缩小左边的窗口左边界限向右移动
- 直到最右边界限
代码
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { const set = new Set();//记录窗口内元素是否出现过 let i = 0, j = 0, res = 0;//左右指针、答案 if(s.length == 0)return 0;//特殊情况 while(j < s.length){//右边界小于字符串长度 if(!set.has(s[j])){//set中没有 set.add(s[j]);//放入set中 res = Math.max(res, set.size);//看看答案要不要更新 }else{//set中已经有了 while(set.has(s[j])){//右移左边界直到没有重复字符 set.delete(s[i]); i++; } set.add(s[j]);//将右边界字符加入 } j++;//无论如何右边界都是一直走的 } return res };
okkjoo-leetcodeHot-byJs
带你用 JS 刷高频面试算法题~还有各种常用、常考手写, 最近还加了自己实现的流行库的mini版本合集仓库:okkjoo-leetcodeHot-byJs欢迎 star⭐
前端校招刷题准备-题解合集 文章被收录于专栏
力扣刷了一遍,再到这里适应一下做题环境+复习