为啥我不能通过 LeetCode 练习 139?
Posted
技术标签:
【中文标题】为啥我不能通过 LeetCode 练习 139?【英文标题】:Why can't I pass LeetCode exercise 139?为什么我不能通过 LeetCode 练习 139? 【发布时间】: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']
?
这个建议的解决方案似乎是你要去的地方:javascript Brute Force/ recursive approach and Brute Force/ recursive with memoization approach
不应该是 if (toMemo(leftStr) && toMemo(rightStr)) 吗?
在你返回 false 之前的 memo.set(s, true) 是否应该是 memo.set(s, false)?
【参考方案1】:
您的代码中唯一的错误是您返回false
。在这种情况下,您不应该这样做:
memo.set(s, true)
return false;
但是:
memo.set(s, false);
return false;
【讨论】:
以上是关于为啥我不能通过 LeetCode 练习 139?的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 139. 单词拆分---完全背包问题之true or false类型
Leetcode练习(Python):链表类:第143题:重排链表:给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→