无重复字符的最长子串

题目描述:

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

求解代码:

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
   var res = 0; //初始化最长子串长度
   var i = 0; 
   var temp = []; //初始化存放子串字符的数组
   while(i<s.length){
       if(temp.indexOf(s[i]) === -1){
           temp.push(s[i]);   //如果s[i]不存在temp中,则向temp中添加该元素
       }else{
           temp.shift(); //去掉temp数组中的第一个元素
           continue; //继续判断当前元素是否存在temp中
       }
       res = Math.max(res,temp.length); //保留最大的子串长度
       i++;
   }
   return res
};

 

扩展:

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

代码如下:

  var lengthOfLongestSubstring = function(s) {
    var res = 0; //初始化最长子串长度
    var i = 0;
    var temp = []; //初始化存放子串字符的数组

    var v_temp = [];
    while (i < s.length) {
        if (temp.indexOf(s[i]) === -1) {
            temp.push(s[i]); //如果s[i]不存在temp中,则向temp中添加该元素
        } else {
            temp.shift(); //去掉temp数组中的第一个元素
            continue; //继续判断当前元素是否存在temp中
        }
        if (res < temp.length) {
            v_temp = [...temp]; //深拷贝
            res = temp.length;
        }
        i++;
    }
    return [res,v_temp.join("")]
};
var str = "abcabcbb";
// var str = "bbbbbbbbbb";
// var str = "eeydgwdykpv";
// var str = "pwwkew";
// var str = "abcabcdbbabc";
var new_str = lengthOfLongestSubstring(str);
console.log(new_str)

 

 注意:和上面单纯求解长度的思想是一样的

 

posted @ 2020-02-12 10:51  蛋片鸡  阅读(147)  评论(0)    收藏  举报