描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
思路
分析题目,要求取出不重复的字符串的最长值,那么会想到set结构,set内不允许重复值。 -->定义一个Set
还要返回最长值,再定义一个变量maxLen存储它。
再定义一个变量j指向字符串开头,用于遍历字符串时遇到相同值后,去除该值。
for循环遍历字符串(i为下标),
判断set内是否存在s[i],如果没有,则添加到set,并且每次添加值都要判断当前的maxLen和set.size谁大,并且把他赋值给maxLen
如果有,那么将j对应的值从set中删除,然后j++,直到set内不存在s[i],因为j也是从0增大的,他和i遍历的数的顺序相同,必定能找到满足s[i]===s[j]的值,然后删除它,之后再添加s[i],当添加是就会执行第一个判断语句,从而更新maxLen。
代码
var lengthOfLongestSubstring = function (s) {
var set = new Set();
var i = 0,j = 0, maxLength = 0;
if(s.length === 0) return 0;
for(i; i < s.length; i++){
if(!set.has(s[i])){
set.add(s[i]);
maxLength = Math.max(maxLength,set.size)
}else{
while(set.has(s[i])){
set.delete(s[j]);
j++;
}
set.add(s[i]);
}
}
return maxLength;
};