我试图解决这个问题:最长的子字符串不重复的字符。问题是,它在两个测试案例中失败了,我不知道如何解决它。我需要你的帮助,看看我要去哪里错了。最长的子串没有重复的字符问题与边缘情况下
问:
给定一个字符串,找到最长的字符串的长度而不 重复字符。
实例:
鉴于 “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重新开始,您应该从前一个列表的第二项返回。 –
但我该如何编程?对不起,我错过了这里的逻辑:(任何帮助将不胜感激。这是否意味着我总是必须存储地图中每个元素的索引? – TechnoCorner