第一种:也是我写的,弱智写法,两个for不断循环累积子串判断有没有重复
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
if (s =='') return 0
let count = 1,max = 1
for(let i = 0; i< s.length; i++) {
let tmp = new Map()
tmp.set(s[i],1)
for (let j = i+1; j < s.length; j++) {
if(!tmp.has(s[j])) {
tmp.set(s[j],1)
count ++
}
else {
count = 1
break
}
if(count>max) max = count
if(j == s.length-1) count =1
}
}
return max
};
时间复杂度为O(n^3)

第二种,通过迭代字符串然后slice截取字符串再用indexof找到重复的字符串,遇到重复的就把startnum重置,最后找到最长子串
var lengthOfLongestSubstring = function(s) {
let startNum = 0;
let maxNum = 0;
s.split('').forEach((v, i) => {
const index = s.slice(startNum, i).indexOf(v);
if(index === -1) {
// 无重复字符
maxNum = Math.max(maxNum, i - startNum + 1);
} else {
// 重复字符
startNum = index + startNum + 1;
}
});
return maxNum;
};
