Skip to content

Latest commit

 

History

History
74 lines (51 loc) · 1.47 KB

3. 无重复字符的最长子串.md

File metadata and controls

74 lines (51 loc) · 1.47 KB

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

示例 1:

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

示例 2:

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

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思路

快慢双指针。

  1. 当前字符串中没有相同字符时,直接往后添加,right右移
  2. 当遇到相同字符时,必然是left = right所指向的字符,此时将left右移
  3. right遍历完的时候,需要再用当前字符串长度与之前的最大长度比较一边

代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
  let left = 0, right = 0, max = 0;
  let str = '';
  while(right < s.length) {
    if (str.includes(s[right])) {
      left ++;
      str = s.slice(left, right)
    } else {
      right ++;
      str = s.slice(left, right)
      max = Math.max(max, str.length)
    }
  }
  return max;
};

复杂度分析

时间复杂度 $O(N)$

空间复杂度 $O(1)$