0
点赞
收藏
分享

微信扫一扫

leetcode 3 无重复字符的最长子串JS

清冷的蓝天天 2022-04-14 阅读 58
leetcode

 

 滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。

 在具体使用之前,我们知道窗口实际是两个指针之间形成的区域,那关键就是这两个指针是如何移动的。
1.初始时,左右指针left,right都指向第0个元素,窗口为[left,right),注意这里是左闭右开,因此初始窗口[0,0)区间没有元素,符合我们的初始定义
2.开始循环遍历整个数组元素,判断当前right指针是否超过整个数组的长度,是退出循环,否则执行第3步
3.然后right指针开始向右移动一个长度,并更新窗口内的区间数据
4.当窗口区间的数据满足我们的要求时,右指针right就保持不变,左指针left开始移动,直到移动到一个不再满足要求的区间时,left不再移动位置
5.执行第2步

 

/**
 * @param {string} s
 * @return {number}
 */
 var lengthOfLongestSubstring = function(s) {
     let left = 0; // 左指针
     let right = 0; // 右指针
     let arr = [];
     let max = 0; // 最长长度
        // 当右指针不越界的时候
        while(right < s.length){
            for(let i = 0; i < s.length; i++){
            // 数组中不存在时,将数据放进窗口
            if(arr.indexOf(s[i]) === -1){
                arr.push(s[i])
            }else{
                arr.push(s[i])
                // 数组中存在时,将前面的数据删掉,且左指针右移
                arr.splice(0, arr.findIndex(j=> j === s[i])+1)
                left++
            }
            // 每次右指针都要右移,且更新最长长度的值
            right++
            max = Math.max(arr.length,max)
         }
     }
     return max
};
举报

相关推荐

0 条评论