我在最近的一次採訪中被問到這個問題。我需要找到最長的substring
而不重複字符。最長的子串沒有重複的人物角落案件
鑑於 「abcabcbb
」,答案是 「abc
」,其長度爲3
賦予 「bbbbb
」,答案是 「b
」,用的1
鑑於長度「 pwwkew
」,答案是‘wke
’,用3
長度。這是我想出了,我覺得它工作正常,但面試官沒有留下深刻印象,說我的解決方案可能不適合所有情況。
var str = "pwwkew";
var longSubstring = function(str) {
var obj = {}; //map object
var count = 0;
var c = []; //count array to keep the count so far
for (var i = 0; i < str.length; ++i) {
//check if the letter is already in the map
if (str[i] in obj && obj[str[i]] !== i) {
c.push(count); //we encountered repeat character, so save the count
obj = {};
obj[str[i]] = i;
count = 1;
continue;
} else {
obj[str[i]] = i;
++count;
}
}
return Math.max.apply(null, c);
}
console.log(longSubstring(str)); //prints 3
誰能告訴我什麼是我的解決方案的問題?我認爲這是最好的:)並且也在O(n)
時間內解決。
什麼是「aaaabbbbaaaabbbbaaaabbbb」意味着返回? – wot
@ e4en它應該返回2.任何ab,ba ...我的代碼也適用於這個 –
@WildWidow。如果輸入是'abc',將輸出什麼.It返回-Infinity –