leetcode3无重复字符的最长子串

70 阅读1分钟

3. 无重复字符的最长子串 - 力扣(LeetCode)

思路:主要思路采用双指针的方式,右指针负责从左到右的一个遍历,左指针要进行判断什么时候进行移动和计算。当右指针指向的元素在左指针的右指针的区间找到值,这个时候重新计算左指针的值。

采用indexOf(ch,start)从start这个位置开始查找ch字符第一次出现的位置。需要注意的小点是如果存在的话返回的是在这个字符串中索引位置,不是从start之后的索引位置。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let res = 0 
    let left = 0 ,len = s.length
    for(let right = 0 ;right<len;right++){
        let index = s.indexOf(s[right],left)
        console.log(index,'index')
        if(index==-1||index>=right){
            res = Math.max(res,right-left+1)
        }else{
            left = index+1
        }
    }
    return res
};

仅采用indexOf(ch)方式获取索引处理

var lengthOfLongestSubstring = function(s) {

    let result=[];

    let max = 0;

    //遍历 result.indexOf(val)判断数组是否含有某值,有的话,就返回下标(下标从0开始),否则就返回-1

    //str.splice(pos,delCnt); 从pos位置开始 删除delCnt个元素,

    for(let i=0;i<s.length;i++){

        //在js中字符串可以当作数组处理,访问单个元素的方法:1.通过下标访问 2.charAt() 推荐charAt()

        let index = result.indexOf(s[i]);

        if(index!==-1){   //不等于-1 表示找到了元素,然后进行删除

            result.splice(0,index+1);

        }

        result.push(s.charAt(i));

        max = Math.max(result.length,max);

    }

    return max;

};