【发布时间】:2020-09-17 15:54:20
【问题描述】:
我在看这个leetcode challenge:
给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判断s是否可以分词成一个或多个字典单词的空格分隔序列。
var wordBreak = function(s, wordDict) {
const memo = new Map();
const wordSet = new Set(wordDict);
function toMemo(s) {
if (memo.has(s)) return memo.get(s);
if (wordSet.has(s)) {
memo.set(s, true);
return true
}
for (let i = 1; i < s.length; i++) {
let leftStr = s.substr(0, i);
let rightStr = s.substr(i);
if (toMemo(leftStr) && wordSet.has(rightStr)) {
memo.set(s, true)
return true;
}
}
memo.set(s, true)
return false;
}
return toMemo(s);
};
我的代码没有通过以下测试用例:
您的意见:
"aaaaaaa"
["aaaa","aa"]
输出:true
期待:false
我该如何处理这个问题?我不明白为什么这个例子有效而我的没有?
【问题讨论】:
-
我得到了
true作为wordBreak("aaaaaaa", ["aaaa", "aa"])的结果,所以我不确定我错过了什么......是你上面的功能,还是网站?你期待false吗?看起来你的输入/输出/预期的日语标签表示......我认为这是因为输入长度既不能被 4 整除,也不能被 2 整除,因为长度是 7。我认为它适用于['aaaa', 'aaa']? -
不应该是 if (toMemo(leftStr) && toMemo(rightStr)) 吗?
-
在你返回 false 之前的 memo.set(s, true) 是否应该是 memo.set(s, false)?
标签: javascript algorithm