101. Leetcode 139. 单词拆分 (动态规划-完全背包)

步骤一、确定状态:

确定dp数组及下标含义

dp[j]表示的是长度为j的字符串(容量为j的背包)能否被拆分成1个或者多个单词 里面的值, 所以这里的dp[j]非1即0

步骤二、推断状态方程:

if dp[i] and s[i:j] in wordDict: dp[j] = True

步骤三、规定初始条件:

初始条件:

首先全局初始化的话都是False, 只要没有被覆盖说明都是不可拆分为一个或多个在字典中 出现的单词。而dp[0]需要初始化True,这里为了往下递推,如果也是False的话,那就都 是False了。

步骤四、计算顺序:

对于背包, 依然是正向遍历,而对于物品,也是正向遍历,因为这里的物品 可以取多次

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        n = len(s)
        dp = [False for _ in range(n + 1)]
        dp[0] = True

        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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值