初版成果,暴力循环破解,耗时一小时,性能就不提了。。。好歹写出来了
var lengthOfLongestSubstring = function(s) {
let len = s.length;
if (len === 0) { return 0 }
let max = 0
for (let i = 0; i < len; i++) {
for (let j = i + 1; j <= len; j++) {
let str = s.substring(i,j)
if (str.indexOf(str[str.length-1]) === str.lastIndexOf(str[str.length-1])) {
if (str.length>max) {
max = str.length
}
} else {
break
}
}
}
return max
};
学习一下大神的滑动窗口解法…耗时短一半多
var lengthOfLongestSubstring = function(s) {
let len = s.length;
if (len === 0) { return 0 }
let max = 1
let left = 0
let map= new Map()
for (let right = 0; right < len; right++) {
if (map.has(s[right]) && map.get(s[right]) >= left) {
left = map.get(s[right]) + 1
}
max = Math.max(max, right-left+1)
map.set(s[right], right)
}
return max
};