一开始我自己的解法:暴力的使用了两次循环达到每次遇到重复字符后去除头部的目的,耗时228ms
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var res = '';
var max = 0;
for(var i = 0; i < s.length; i++){
for(var j = i; j < s.length; j++){
if(res.indexOf(s[j]) == -1){
res += s[j]
if(res.length > max){
max = res.length;
}
}else{
res = '';
break;
}
}
}
return max
};
以下解法是在题解看见的,觉得很好,记录一下,大致逻辑是在遇到相同字符后直接将头部删除,这样后面每次循环的长度就会越来越短,耗时76ms
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
let res = []
let max = 0
for (let str of s) {
while (res.includes(str)) {
res.shift()
}
res.push(str)
max = Math.max(max,res.length)
}
return max
};