题目描述
解题思路
- 本题采用哈希表 + 滑动窗口的思路
- 哈希表用来存储每个字符出现的次数,当单个字符出现2次的时候,用以辅助我们移动滑动窗口
- 首先定义一个左右指针,左指针和右指针初始时指向0,右指针不断右移作为判断循环的条件,当右指针移动到字符串长度的位置时,结束循环。
- 具体过程看注释,注释很详细
解题代码(模拟队列)
var lengthOfLongestSubstring = function (s) {
const window = new Map();
let left = 0;
let right = 0;
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;
};
总结(本题给我们的启示思路)
- 启示一:学会使用滑动窗口 + 哈希表
- 启示二:学会使用双指针
- 启示三:学会通过更新的方式获取到最大值