1.求字符串中不重复的最长子串
var lengthOfLongestSubstring = function (s) {
let setArr = new Set(), result = [],
max = 0;
let left = 0, right = 0, len = s.length;
while (left < len) {
// 如果不重复,就不断扩张窗口,元素添加到set中
while (right < len && !setArr.has(s[right])) {
setArr.add(s[right]);
right++;
}
// 到这里说明有元素重复了,先记录子串长度,然后收缩窗口
//当里面有了这个字符,删除之前先存一下
//存的条件是长度比里面的都大,并且不重复
//这个可以是找出里面长度是最长的那个子串
let str1 = s.substring(left,right);
if(str1.length >= max){
result.push(str1)
}
max = Math.max(max, right - left);
// 收缩窗口,删除最左边的
setArr.delete(s[left]);
left++;
}
//这里是把符合最长的长度的子串过滤出来
return result.filter((item,index)=>{
if(item.length == max){
return item
}
})
};
最终返回这个样的值 ["abc", "cba", "bac"]
2.斐波那契数列多种实现方式