Published on

Leetcode - Sliding Window | 滑动窗口 | 无重复字符的最长字串

Authors
  • avatar
    Name
    Shelton Ma
    Twitter

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

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

  1. 思路(滑动窗口):

    • 使用双指针(start、end)和一个哈希表 / Map 来记录字符出现的位置.
    • end 指针向右移动,如果遇到重复字符,就把 start 移动到重复字符的下一个位置.
    • 不断更新窗口长度的最大值.
  2. 实现

    // abcdacd
    function lengthOfLongestSubstring(s) {
      let map = new Map();
      let maxLen = 0;
      let start = 0;
    
      for (let end = 0; end < s.length; end++) {
        const char = s[end];
        if (map.has(char)) {
          // 如果出现重复字符,移动 start
          start = Math.max(map.get(char) + 1, start);
        }
        map.set(char, end);
        maxLen = Math.max(maxLen, end - start + 1);
      }
    
      return maxLen;
    }