LeetCode 3.无重复字符的最长子串

147 阅读1分钟

在刷leetcode第三题的时候 , 大脑中的第一个想法是对测试字符串进行双层for循环遍历 ,原始代码如下

var lengthOfLongestSubstring = function (s) {  let storeLength = [];  if (s == "") {    storeLength.push(0);  } else {    for (let i = 0; i < s.length; i++) {      let strStart = s[i];      let str = strStart;      storeLength.push(1);      for (let j = i + 1; j < s.length; j++) {        if (str.includes(s[j])) {          break;        } else {          str += s[j];          storeLength.push(str.length);        }      }    }  }  return Math.max.apply(null, storeLength)};


点击test测试时候 , 得到了预期的结果


本以为代码通过了 , 但是在提交的时候 , 确报了如下的错误


上网查询了这个错误 , 是由于被测字符串长度过于长 , 双重for循环 ,导致爆栈

失败告终!!

上leetcode官网搜索大神的解法以及学习思路 , 链接如下

leetcode-cn.com/problems/lo…

优化代码

var lengthOfLongestSubstring = function (s) {  let str = "";  let max = 0;  for (let i = 0; i < s.length; i++) {    if (str.includes(s[i])) {      str = str.slice(str.indexOf(s[i]) + 1);    }    str += s[i];    max = Math.max(max, str.length)  }  return max;};

测试一下,并提交


测试通过