Leetcode 140. Word Break II
题目
解法1:动态规划+暴力递归
- 首先用word break I的方法来判断是否能够拆分
- 能拆分之后,暴力recursion解出所有答案
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> List[str]:
def backtracking(start,comb):
if start == 0:
ans.append(comb[:][::-1])
for i in range(start):
if s[i:start] in wordDict and dp[i]:
comb.append(s[i:start])
backtracking(i,comb)
comb.pop()
dp = [False]*(len(s)+1)
dp[0] = True
for i in range(1,len(s)+1):
for j in range(i):
if s[j:i] in wordDict and dp[j]:
dp[i] = True
ans = []
backtracking(len(s),[])
res = []
for l in ans:
res.append(' '.join(l))
return res
解法2:recursion+memorization
查看word break I的解法可以发现,recursion+memorization的解法可以解决这个