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]