无重复字符的最长子串
题目链接
3、实现无重复字符的最长子串 难度:中等
题目描述
实现思想
该问题就是寻找一个最大长度的无重复的子串,可以利用滑动窗口
的思想,这里是最大滑窗
的应用。首先我们先新建一个空字符串str并遍历原字符串,将原字符串中的字母在str中查找,若没有找到则将该字母加入str中。随着不断遍历原字符串的字母,最终会与str中的字母重合。此时说明在重合的这个字母之前,str中的字符串就是我们要找到的子串,于是我们返回子串的长度并更新result。然后通过while循环逐渐删除str中的子串并进行新的符合条件的子串的查找并更新result。
实现代码
var lengthOfLongestSubstring = function(s){
const lens = s.length;
let result = 0; //最终返回子串长度
let str = '';
for (let i = 0; i < lens; i++){
//如果窗口里没有当前遍历到的字母,则将其加入str中
if(str.indexOf(s[i]) == -1){
str += s[i];
}else{ //如果字母已经存在,加入该字母并去除str最前面的一个字母
result = result < str.length ? str.length : result; //返回找到的子串长度并更新result
str += s[i];
//若当前遍历的字母在str中找到的是最后一个位置时才结束while循环
//这个while循环的作用是表示已经完成了一个字串的寻找,所以清空str开始新的符合条件的子串寻找
while (str.indexOf(s[i]) != str.length - 1){
str = str.slice(1); //选取从下标1开始的所有字母,也就是去除str中的第一个字母
}
}
result = result < str.length ? str.length : result;
}
return result;
};