问题:
给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。
解:
function lengthOfLongestSubstring(s) {
let obj = {}
let max = 0
let num = 0
for (let i = 0; i < s.length; i++) {
let k = s[i]
if (obj[k] === undefined) {
obj[k] = i
num++
} else {
i = obj[k]
max = max > num ? max : num
obj = {}
num = 0
}
}
max = max > num ? max : num
return max
}
思路:
遍历字符串并记录下每一个字符及其下标,利用 num
记录下已经遍历的长度。如果在遍历过程中,出现了重复的字符,就用 max
记录下最大长度。最后,将指针 i
返回到重复字符第一次出现的位置的下一位,重新开始新一轮的记录(重点)。
注意:如果不将指针 i
回滚的话,可能会出现漏记的情况。