代码实现在最下面,下面的图片展示,打断点的调试过程,解题思路是,先声明一个数组window,和一个最大值max,然后遍历数组,从前往后遍历每一项,把每一项放入数组window中,放入每一项都会去记录max值,但是放入每一项有个前提条件就是,不可以和之前放入的每一项重复了,如果重复了仍然想要进入window数组,则需要把从window的第一项到和当前项相等的下标位置,全部删除,不用担心会影响max值,因为在这里会做大小判断,max会记录之前最长的时刻的,如果后续window不够长了,就不会影响max值。
const lengthOfLongestSubstring = s => {
// 滑动窗口
const window = [];
let max = 0;
const len = s.length;
for (let i = 0; i < len; i++) {
// 当前字符在窗口中的索引
const index = window.indexOf(s[i]);
if (index !== -1) {
// 当前字符在窗口中出现过,那么就将窗口中[0,index]区间的全部去除
// 从index+1开始新一轮的窗口
window.splice(0, index + 1);
}
// 当前字符加入窗口
window.push(s[i]);
// 更新最大值
if (max < window.length) max = window.length;
}
return max;
};
console.log(lengthOfLongestSubstring("abcdbefghijk"));
打断点