无重复字符的最长子串用到的我用到的是滑动窗口的方法:
/*
* @lc app=leetcode.cn id=3 lang=javascript
*
* [3] 无重复字符的最长子串
*/
// @lc code=start
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
let slen = s.length;
// 如果字符串的长度为0直接返回0
if(slen === 0) {
return 0;
}
// 窗口
let window = [];
// 记录窗口中的长度最大值
let max = -Infinity;
for(let i = 0; i < slen; i++) {
if(!window.includes(s[i])) {
// 扩大窗口
window.push(s[i]);
} else {
// 当前值在窗口中的索引
const preIndex = window.indexOf(s[i]);
/** 缩小窗口 这里不用splice而是用slice的原因是题目要的是子串(需要连续)如果splice的话就不连续了 */
window = window.slice(preIndex + 1);
// 扩大窗口
window.push(s[i]);
}
// 记录最大值
max = Math.max(window.length,max);
}
return max;
};