天天看点

3. 无重复字符的最长子串题目例子思路代码

题目

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

例子

示例 1:

输入: s = "abcabcbb"

输出: 3 

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

示例 2:

输入: s = "bbbbb"

输出: 1

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

示例 3:

输入: s = "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

示例 4:

输入: s = ""

输出: 0

思路

滑动窗口思想:

【left  right】当这个范围内没有重复字符

去判断right+1位置的字符是否在【left  right】内重复

如果重复,更新left为right+1

反之这个窗口变成【left  right】

此时长度为 right - left + 1,对比一下最大值max看是否更新

代码

var lengthOfLongestSubstring = function (s) {
    if (s.length == 0) {
        return 0;
    } else if (s.length == 1) {
        return 1;
    } else {
        let left = 0, right = left + 1, max = 0;
        while (right < s.length) {
            let index = s.indexOf(s[right], left);
            if (index >= left && index < right) {
                left = index + 1;
            } else {
                if (max < (right - left + 1)) {
                    max = right - left + 1;
                }
                right++;
            }
        }
        return max;
    }
}