【发布时间】:2017-07-30 18:47:12
【问题描述】:
我试图解决这个问题:最长的子串没有重复字符。问题是,它在几个测试用例中都失败了,我不知道如何解决它。我需要你的帮助,看看我哪里出错了。
问题:
给定一个字符串,求最长子串的长度 重复字符。
例子:
给定“abcabcbb”,答案是“abc”,长度为3。
给定“bbbbb”,答案是“b”,长度为1。
给定“pwwkew”,答案是“wke”,长度为 3。注意 答案必须是子字符串,“pwke”是子序列而不是 子字符串。
这是我的代码:
function longestSubString(arr){
let localSum=0,globalSum=0;
let set = new Set();
for(let i=0; i<arr.length; i++){
let current = arr[i];
//if the key is present in the store.
if(set.has(current)){
set.clear();
localSum = 1;
set.add(current);
} else {
localSum +=1;
set.add(current);
}
if(globalSum < localSum){
globalSum = localSum;
}
}
return globalSum;
}
测试:
let test = "abcabc"; //returns 3 - correct
let test2 = "bbb"; //returns 1 - correct
let test5 = "dvdf"; //returns 2 - INCORRECT! it should return 3 (i.e for vdf) since I'm doing set.clear() I'm not able to store previous elements.
longestSubString(test5); //incorrect
直播:
https://repl.it/Jo5Z/10
【问题讨论】:
-
满足
set.has(current)条件时,不应从0重新开始,应从上一列表的第二项返回。 -
但是我如何以编程方式做到这一点?对不起,我在这里遗漏了逻辑:(任何帮助将不胜感激。这是否意味着我总是必须将每个元素的索引存储在地图中?