无重复字符的最长子串js

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31126175/article/details/84798945

题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

解答

方法一

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let max = 0;
    let n = s.length;
    for(let i = 0;i< n;i++){
        for(let j=i+1;j<=n;j++){
            if(all(s,i,j)){
                max = Math.max(max,j-i)
            }
        }
    }
    return max;
};

function all(s,start,end){
    let set = new Set()
    for(let i = start;i<end;i++){
        if(set.has(s[i])){
           return false;
           }else{
            set.add(s[i])
        }
    }
    return true;
}

时间复杂度高

方法二

var lengthOfLongestSubstring = function(s) {
    let result = '';//最终结果
    let temp = '';  //临时变量
    for(let i=0; i<s.length; i++){
        if(temp.indexOf(s[i]) == -1) {  // 当temp中不含有s[i]时
            temp += s[i];       // 所有不重复的字符放入temp中
            if(temp.length > result.length) {  //当temp的长度大于result的长度时 使result=temp
            result = temp;
            }
        } else {                                // 当temp中含有s[i]时
            if(temp.length > result.length) {
                result = temp;
            }
            let index = temp.indexOf(s[i]);  //返回temp 重复的位置 
            temp = temp.slice(index+1) + s[i];  //  当出现重复字符时对temp 重新赋值 从重复的字符之后到结束加上重复的字符 abca -> bca
        }
    }
    return result.length ;
};

再次简化

var lengthOfLongestSubstring = function(s) {
    let str="" //存放无重复子串
    let size=0 //当前最长无重复子串的长度
    for(let i=0,len=s.length;i<len;i++){
        let a = s[i];
        let index=str.indexOf(a)
        if(index==-1){
            str+=a
            size=Math.max(size,str.length)
        }else{
            str=str.substr(index+1)+a
        }
    }
    console.log(size);
    
    return size
};

猜你喜欢

转载自blog.csdn.net/qq_31126175/article/details/84798945
今日推荐