一、题目描述
设有一字符串序列 s,确定该序列中最长的无重复字母的子序列,并返回其长度。
备注
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
示例1
输入
s = "abcabcbb"
输出
3
二、原题链接
这道题在LeetCode上的原题链接:LCR 016. 无重复字符的最长子串
三、解题思路
使用滑动窗口来解决这道题,可以直接看下面代码中的注释进行理解就好,以下代码展示有详细的注释,一定要弄懂,这个题不难,最好是自己画一个图理解一下,这里不好讲解,后续可能会在哔站出一个讲解的视频,可以持续关注一下!
四、JS代码展示
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
// 使用滑动窗口来解决这题
let left = 0; // 左指针的位置,初始值为0。
let res = 0; // 记录最长无重复子序列的长度,初始值为0
let set = new Set(); // 一个集合,用来存储当前窗口内的字符
for(let right=0; right<s.length; right++){
// 如果集合中已经存在当前字符,移动左指针并删除左指针指向的字符,直到集合中不包含当前字符
while(set.has(s[right])){
set.delete(s[left]);
left++;
}
// 将当前字符加入集合
set.add(s[right]);
// 更新最大长度
res = Math.max(res,right-left+1);
}
return res;
};
如果以上内容对你有帮助,请点赞收藏吧❥(^_-),喜欢作者也可以加关注,后续会一直更新有关前端面试题的分享!