【发布时间】:2023-01-31 18:22:06
【问题描述】:
你好,我只是想了解和澄清一些事情,我正在解决这个问题“没有重复字符的最长子串”,我正在使用一个对象作为地图但解决方案没有被接受,它说超过了时间限制,但是当我将对象更改为一张地图,它工作得很好。
这是代码:
function lengthOfLongestSubstring(s = "") {
let end = 0;
let start = 0;
let maxLength = 0;
const map = new Map();
while (end < s.length) {
if (!map.has(s[end])) {
map.set(s[end], end);
end++;
maxLength = Math.max(maxLength, end - start);
} else {
map.delete(s[start]);
start++;
}
}
return maxLength;
}
以下代码将不被接受:
function lengthOfLongestSubstring(s = "") {
let end = 0;
let start = 0;
let maxLength = 0;
const map = {};
while (end < s.length) {
if (!map[s[end]]) {
map[s[end]] = end;
end++;
maxLength = Math.max(maxLength, end - start);
} else {
delete map[start];
start++;
}
}
return maxLength;
}
【问题讨论】:
-
那是什么密码没有工作?
-
@CertainPerformance 只需将 map 对象更改为简单对象,它就会抛出超出时间限制,我在 leetcode 上解决了这个问题,他们接受新的 map () 实现但不接受简单对象 {}
-
你好,你收到每个测试用例的 TLE 了吗?
-
检查这个答案,它表明地图比对象快得多 stackoverflow.com/a/37994079/668572
-
如果您将地图更改为普通对象而不更改任何其他内容,您的代码将抛出错误,因为普通对象上不存在 ``.has`(和其他方法)
标签: javascript big-o