题目:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 ****的长度。
思路:
滑动窗口, 用一个哈希表来存字串中的字符的出现次数, 如果次数大于1,就说明重复了,就缩小字串长度,left++, 然后更新满足条件的字串最大值, 然后right++,扩大字串,如果满足条件就更新答案,并继续扩大, 不满足了再缩小
代码:
var lengthOfLongestSubstring = function (s) {
let map = new Map();//哈希
let ans = 0;
let left = 0;
for (let right = 0; right < s.length; right++) {
const x = s[right];
map.set(x, map.get(x) + 1 || 1);
//有重复字符, 就缩小字串,直到无重复的字符
while (map.get(x) > 1) {
const y = s[left];
map.set(y, map.get(y) - 1 || 0);
left++;
}
ans = Math.max(ans, right - left + 1);
}
return ans;
};