要找到最长的无重复子串,那就需要一个容器来记录当前的子串,判断是否重复,如果重复,那就寻找下一处,按照这个思路,我们可以使用map来存储当前的字符以及索引,然后再次碰到该字符时,就更新索引,达到目的。
var lengthOfLongestSubstring = function (s) {
let hash = new Map()
let max = 0
let start = 0
for (let i = 0; i < s.length; ++i) {
if (hash.has(s[i])) {
// 已经存在当前字符,那就更新起始处
// 更新到当前字符的下一位置
start = Math.max(start, hash.get(s[i]) + 1)
}
// 存储当前字符索引
hash.set(s[i], i)
// 计算长子串
max = Math.max(i - start + 1, max)
}
return max
};