我試圖解決這個問題:最長的子字符串不重複的字符。問題是,它在兩個測試案例中失敗了,我不知道如何解決它。我需要你的幫助,看看我要去哪裏錯了。最長的子串沒有重複的字符問題與邊緣情況下
問:
給定一個字符串,找到最長的字符串的長度而不 重複字符。
實例:
鑑於 「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