解决方法
方法一:暴力解法+Set
- 解题思路
- 以每个字符串为开头遍历一遍,也就是总共遍历两遍。
- 知识点
- Set类似于数组,但是成员的值都是唯一的,没有重复的值。
- Set.prototype.add(value):添加某个值,返回 Set 结构本身。
- Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
- Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
var lengthOfLongestSubstring = function(s) {
let count=0;
for(let i=0;i<s.length;i++){
let set=new Set();
let max=0;
let j=i;
while(j<s.length&&!set.has(s[j])){
set.add(s[j]);
max++;
j++;
}
count=Math.max(count,max);
}
return count;
};
方法二:滑动窗口
- 解题思路
- 循环去掉左边第一个元素,直到窗口中元素无重复,此时再扩大窗口。主要就是进行扩张与收缩,右指针扩张到滑动窗口不满足条件的时候暂停,左指针开始收缩窗口,让窗口满足条件后右指针再进行扩张。
var lengthOfLongestSubstring = function(s) {
let count=0;
let set=new Set();
let left=0;
let right=0;
while(left<s.length){
while(right<s.length&&!set.has(s[right])){
set.add(s[right]);
right++;
}
count=Math.max(count,right-left);
set.delete(s[left]);
left++;
}
return count;
};