题意
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路
1、用max维护最长子串长度,然后结合双指针,将作边指针一步步往右移。 2、用map存储字符的情况。(map对象是按set的顺序来存储的,因此可以用来左指针的移动。)
var lengthOfLongestSubstring = function(s) {
let n = s.length
let max = 0
let map = new Map()
let len = 0
for(let i = 0;i < n;i++){
if(map.has(s[i])){
for(let [key, value] of map){
map.delete(key)
if(key!=s[i]) {
len--
}
else {
map.set(key, 1)
break
}
}
max = Math.max(Object.keys(map).length, max) // Object.keys(map).length用来获取map的长度
}else{
map.set(s[i], 1)
len++
max = Math.max(len, max)
}
// console.log(map)
}
return max
};