Skip to content

Latest commit

 

History

History
78 lines (57 loc) · 2.62 KB

139-word-break.md

File metadata and controls

78 lines (57 loc) · 2.62 KB

139. Word Break - 单词拆分

给定一个非空字符串 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

题目标签:Dynamic Programming

题目链接:LeetCode / LeetCode中国

题解

一开始想到递归,果不其然,TLE。

然后改成记忆化递归,结果因为用了类变量,而LeetCode是同一实例重复调用方法,结果出错。

于是,定义个函数用于递归,就解决了上面的问题。

Language Runtime Memory
python3 36 ms N/A
class Solution:
    def wordBreak(self, s, wordDict):
        """
        :type s: str
        :type wordDict: List[str]
        :rtype: bool
        """
        cache = {}
        def warpper(_s, _wordDict):
            if _s in cache:
                return cache[_s]
            for w in _wordDict:
                if _s == w:
                    cache[_s] = True
                    return True
                elif _s.startswith(w):
                    if warpper(_s[len(w):], _wordDict):
                        cache[_s] = True
                        return True
            cache[_s] = False
            return False
        return warpper(s, wordDict)