问题描述
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "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]))
。