Skip to content
在本页面

无重复字符的最长子串

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母、数字、符号和空格组成

对比

TypeScript
function lengthOfLongestSubstring(s: string): number {
    if (!s) return 0;
    let result = '';
    let current = '';
    for (let i = 0; i < s.length; i++) {
        const item = s[i];
        const index = current.indexOf(item)
        if (index !== -1) {
            if (result.length <= current.length) result = current;
            current = current.slice(index+1) + item;
        } else {
            current += item;
        }
    }
    if (result.length < current.length) result = current
    return result.length;
};

滑动窗口

TypeScript
function lengthOfLongestSubstring(s: string): number {
    let maxLen = 0, left = 0;
    let obj = {};
    for (let i = 0; i < s.length; i++) {
        const item = s[i];
        if (item in obj && left <= obj[item]) {
            left = Math.max(left + 1, obj[item] + 1);
        }
        obj[item] = i;
        maxLen = Math.max(maxLen, i - left + 1);
    }
    return maxLen;
};

Released under the MIT License.