题目及描述:
题目难度 中等
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
解题思路:
不重复无非是子串中不存在相同的字母,我们可以用search函数来判断我们当前最短子串中是否存在,但我们用比较源生的方法进行解答,代码如下。
var lengthOfLongestSubstring = function(s) {
var len = s.length;
if (len < 1) return len;
var longest = 1;
var curLen = 1;
var subStart = 0;
var charPos = {};
charPos[s.charAt(0)] = 0;
for (var i = 1; i < len; i++) {
var char = s.charAt(i);
var posCharPrev = charPos[char];
if (posCharPrev !== undefined && posCharPrev >= subStart) {
subStart = posCharPrev + 1;
curLen = i - subStart + 1;
}
else {
curLen++;
if (curLen > longest) longest = curLen;
}
charPos[char] = i;
}
return longest;
};