Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单词拆分 #113

Open
louzhedong opened this issue Dec 25, 2018 · 0 comments
Open

单词拆分 #113

louzhedong opened this issue Dec 25, 2018 · 0 comments

Comments

@louzhedong
Copy link
Owner

louzhedong commented Dec 25, 2018

习题

出处 LeetCode 算法第139题

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

  • 拆分时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
     注意你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

思路

方法一,采用递归的方式,最终超时

方法二,采用动态规划

解答

// 方法一,递归
function helper(s, wordDict, temp, result) {
  if (!s) {
    result.push(true);
    return;
  }
  for (var i = 0; i <= s.length; i++) {
    if (wordDict.indexOf(s.slice(0, i)) >= 0) {
      temp.push(s.slice(0, i));
      helper(s.slice(i), wordDict, temp, result);
      temp.pop();
    }
  }
}
var wordBreak = function (s, wordDict) {
  var result = [];
  var temp = [];
  helper(s, wordDict, temp, result);
  return result[0] || false;
};

// 方法二,动态规划
var wordBreak = function (s, wordDict) {
  var dp = [];
  for (var i = 0, len = s.length; i <= len; i++) {
    if (wordDict.indexOf(s.slice(0, i)) >= 0) {
      dp[i] = true;
    }
    for (var j = 0; j < i; j++) {
      if (dp[j] && wordDict.indexOf(s.slice(j, i)) >= 0) {
        dp[i] = true;
      }
    }
  }
  return dp[s.length] || false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant