【发布时间】:2016-06-09 09:18:38
【问题描述】:
我在最近的一次采访中被问到这个问题。我需要找到最长的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”返回?
-
@e4en 它应该返回 2。任何 ab、ba...我的代码也适用于此
-
@WildWidow 。如果输入是“abc”,输出会是什么。它返回 -Infinity
-
@WildWidow:这个帖子似乎有更好的方法。请看这个stackoverflow.com/questions/9734474/…
-
您的解决方案可能工作正常,但我认为它不是 O(n) 时间解决方案。你做了 n 次
str[i] in obj操作。
标签: javascript arrays string time-complexity asymptotic-complexity