# 两数之和
# 题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
1
2
3
2
3
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
1
2
3
2
3
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
1
2
3
4
2
3
4
# 解题
# 维护数组,遍历字符串
代码的思路比较简单,就是维护一个数组arr,对原字符串遍历,判断字符是否在arr里面,不在的话就直接push进去,再重新判断max的大小;在的话就将之前重复arr字符之前的项全部去除,再重新push进去。
const lengthOfLongestSubstring = function (s) {
let arr = [];
let max = 0;
for(let item of s){
if(arr.includes(item)){ // 如果有这个元素
let index = arr.indexOf(item); // 查看这个元素的位置
arr.splice(0, index + 1); // 删除掉这个元素包括这个元素前面的所有的元素
}
arr.push(item);
max = Math.max(max, arr.length); // 每次没删除之前,记录下这个数组的长度
}
return max;
};
// splice注解
let arr = ['a', 'b', 'c'];
arr.splice(0, 1); // arr is ['b', 'c'];
let arr = ['a', 'b', 'c'];
arr.splice(0, 2, 'e', 'f'); // arr is ['e', 'f', 'c'];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20