无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "pwwkew"
输出: 3
方法一:暴力解法Set
function lengthOfLongestSubstring(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++
}
console.info(count)
count = Math.max(count, max)
}
return count;
}
lengthOfLongestSubstring('pwwkew')
方法二:滑动窗口
- 解题思路
- 循环去掉左边第一个元素,直到窗口中元素无重复,此时再扩大窗口。主要就是进行扩张与收缩,右指针扩张到滑动窗口不满足条件的时候暂停,左指针开始收缩窗口,让窗口满足条件后右指针再进行扩张。
function lengthOfLongestSubstring(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;
}
lengthOfLongestSubstring('pwwkew')
滑动窗口解法2:
var lengthOfLongestSubstring = function(s) {
let set = new Set()
let 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
}