3.Longest Substring Without Repeating Characters

问题描述

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

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列  而不是子串。

JS解法

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    if (s.length <= 1) {
        return s.length;
    }
    let myMap = new Map();
    let start = -1, maxLen = 0;
    for (let i = 0; i < s.length; i++) {
        if (myMap.has(s[i])) {
            start = Math.max(start, myMap.get(s[i]));
        }
        myMap.set(s[i], i);
        maxLen = Math.max(maxLen, i - start);
    }
    return maxLen;
};

我们使用Map数据结构储存出现过的字母,从头至尾遍历字符串,每当有重复字母出现时,把start更新为max(start, myMap.get(s[i]))

你可能感兴趣的:(3.Longest Substring Without Repeating Characters)