题目描述
解题思路
本题主要采用滑动窗口结合哈希表的思想,涉及到滑动窗口就必然涉及到左右指针,当右指针遍历到某一个元素的时候,我们首先判断哈希表中是否有该元素,无论有无,我们都首先记录下这个元素出现的次数,然后使用while循环,判断右指针指向的元素如果出现重复的情况,则更新左指针,最后更新极值。
AC代码
var lengthOfLongestSubstring = function (s) {
// 定义左指针
let left = 0;
// 定义右指针
let right = 0;
// 定义哈希表窗口
let window = new Map();
// 定义最终返回的最大值
let res = 0;
// 只要右指针没有到终点即开始循环
while (right < s.length) {
// 判断窗口中是否有右指针指向的元素
if (window.has(s[right])) {
window.set(s[right], window.get(s[right]) + 1)
} else {
window.set(s[right], 1);
};
// 右指针的元素出现重复的情况
while (window.get(s[right]) > 1) {
// 左指针对应的数量减一之后再让左指针右移
window.set(s[left], window.get(s[left]) - 1);
left++;
}
right++;
res = Math.max(res, right - left);
}
return res;
};
题目反思
- 学会使用哈希表作为滑动窗口的载体。
- 只要是涉及到窗口的长度,一定要考虑到左右指针之间的关系。