在刷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官网搜索大神的解法以及学习思路 , 链接如下
优化代码
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;};测试一下,并提交

测试通过