【问题标题】: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']?
  • 不应该是 if (toMemo(leftStr) && toMemo(rightStr)) 吗?
  • 在你返回 false 之前的 memo.set(s, true) 是否应该是 memo.set(s, false)?

标签: javascript algorithm


【解决方案1】:

您的代码中唯一的错误是您返回false。在这种情况下,您不应该这样做:

memo.set(s, true)
return false;

但是:

memo.set(s, false);
return false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2019-10-25
    • 2018-05-31
    • 1970-01-01
    • 2020-04-07
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多