139. 单词拆分
动态规划
状态定义:dp[i] 表示子串 s[:i] 是否被空格拆分为一个或多个在字典中出现的单词。
状态转移方程:dp[i] = dp[j] and s[j:i] 是否出现在字典 worddict 中。
初始化:dp[0] = True 表示空串且合法。
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
n = len(s)
dp = [True] + [False] * n
for i in range(n + 1):
for j in range(i):
dp[i] = dp[j] and s[j:i] in wordDict
if dp[i]:break
# for i in range(n):
# for j in range(i+1, n+1):
# if dp[i] and s[i:j] in wordDict:
# dp[j] = True
return dp[-1]