Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. You may assume the dictionary does not contain duplicate words.
Return all such possible sentences.
For example, given
s = “catsanddog”,
dict = [“cat”, “cats”, “and”, “sand”, “dog”].
A solution is [“cats and dog”, “cat sand dog”].
题目:其实就是给定一个字符串S,求解出该字符串能分解成给定字典单词组成的单词串的所有可能解
以下是leetcode discuss上大神stefan的python解
def wordBreak(self, s, wordDict):
memo = {len(s): ['']}
#当s为空串''时,len(s)=0,直接返回[''],十分优雅
#
def sentences(i):
if i not in memo:
memo[i] = [s[i:j] + (tail and ' ' + tail)
for j in range(i+1, len(s)+1)
if s[i:j] in wordDict
for tail in sentences(j)]
return memo[i]
return sentences(0)
该算法实际上是一个递规过程。