# 两数之和

leetCode地址 (opens new window)

# 题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
1
2
3

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
1
2
3

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
1
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
最近更新: 9/22/2022, 5:59:36 AM