步骤一、确定状态:

确定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] = Truefor i in range(n): # 遍历容量for j in range(i+1, n+1): # 遍历物品if dp[i] and s[i:j] in wordDict:dp[j] = Truereturn dp[-1]

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

  1. LeetCode 139. 单词拆分(动态规划)

    题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典 ...

  2. Leetcode 139. 单词拆分

    Leetcode 139. 单词拆分 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/word-break/   本质上 ...

  3. 代码随想录算法训练营第46天 | 动态规划 part08 ● 139.单词拆分 ● 关于多重背包 ● 背包问题总结篇

    #139 单词拆分 没做出来.我原来是把string放到dp里,不对,这种做法永远都不对.他问的是什么(能不能构成,true,false)就要放到dp里 (大部分题是这样)下面是不对的思路: 正确co ...

  4. 代码随想录算法训练营第五十天|动态规划:139.单词拆分、多重背包理论基础、背包问题总结

    [139.单词拆分] 这个题目是一个背包问题.但是他稍微有点不太一样.在于这题判断能否装满背包是在判断单词是否出现在字典中,如果出现,就代表能装满. 背包是长度为i的字符串 物品是长度为i-j的子串 ...

  5. leetcode - 139. 单词拆分

    139. 单词拆分 -------------------------------------------- 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以 ...

  6. LeetCode 139. 单词拆分(DP)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字 ...

  7. 代码随想录算法训练营第四十六天|139.单词拆分、多重背包、背包问题总结篇

    一·.单词划分 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 分析如下: 动规五部曲分析如下: 1.确定dp数组以及 ...

  8. [leetcode]139. 单词拆分

    1.递归+备忘录 class Solution {string s;vector<string> wordDict;unordered_set<string>m_set;vec ...

  9. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

最新文章

  1. mysql触发器删除同步_MySQL 触发器例子(两张表同步增加和删除)
  2. redis管道pipeline的运用
  3. 2016猴年春节有感
  4. jax-rs jax-ws_在JAX-RS中处理异步请求中的超时
  5. 【Java】编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出结果...
  6. Bootstrap3 带表格的面板
  7. 如何解决Greenplum中无法通过标准命令修复的元数据错误
  8. 大数据在新型智慧城市的作用
  9. 综述 | 基于特征的视觉同步定位和建图
  10. 检查了一下同事工作,非常不满意
  11. CenterCrop的Video View
  12. NXP RT1052 eFlexPWM—灵活的增强型 PWM
  13. Java生成文本水印
  14. Spark History Server 没有生效
  15. 用React Hooks与Web Animation API实现动效组件
  16. QTcpSocket客户端和服务端发送图片(或大文件)小Demo
  17. 修改C盘用户的中文名为英文名
  18. 计算机论文一千五,1.论文字数不够,正文要五千字,至少增加1000,但不要抄袭.DOC...
  19. 因特网的发展大致分为哪几个阶段?请指出这几个阶段的主要特点。
  20. 网络基础之为了安全而诞生的NAT(网络地址转换)

热门文章

  1. java基础(一) 深入解析基本类型
  2. Swift 3.1新改动
  3. greenplum 安装笔记
  4. Android 插件框架机制之Small
  5. SQL SERVER 数据库 怎么从一个服务器一个表中把数据插入到另一个服务器中的一个表内(纯复制)...
  6. HTTP,FTP,TCP,UDP及SOCKET
  7. Java中getResourceAsStream的用法小结
  8. Linux 中断之中断处理浅析
  9. SPI总线(一):基本原理篇
  10. 执行 pip3 install selenium 时出现 fail to create process