139. 单词拆分

————————————————————————————————————————————
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:
拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。

示例 1:
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。

示例 2:
输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
输出: true
解释: 返回 true 因为 “applepenapple” 可以被拆分成 “apple pen apple”。
注意你可以重复使用字典中的单词。

示例 3:
输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-break
————————————————————————————————————————————
解题思路:使用动态规划,创建一个一维数组dp[n],其中dp[i]表示从0到i的字符串是否在字符串字典中,那如何更新迭代dp呢?首先设定dp[0]为true,因为0长度字符串必定在字典中。因此可以有dp[i]=dp[i]||dp[i-leng],其中leng是字典中某个字符串的长度。其C++代码如下:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int lengths = s.size();  #计算s字符串的长度int lengthw = wordDict.size();  #计算字典中字符串的数量vector<bool> dp(lengths+1);  #创建一个一维数组dp[0]=1;  #初始化dp[0]为1;for(int i=1;i<=lengths;i++)  #从s字符串的第一个元素开始进行循环{for(string word:wordDict)  #对于字典中的每个字符串元素{int leng = word.size();if(leng<=i && word==s.substr(i-leng,leng))  #判断s的子字符串是否等于字典中的某一个字符串dp[i] = dp[i] || dp[i-leng];  #如果符合条件,则将dp[i]的值变为1}}return dp[lengths];  #输出最后的结果}
};

leetcode - 139. 单词拆分相关推荐

  1. Leetcode 139. 单词拆分

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

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

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

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

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

  4. [leetcode]139. 单词拆分

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

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

    步骤一.确定状态: 确定dp数组及下标含义 dp[j]表示的是长度为j的字符串(容量为j的背包)能否被拆分成1个或者多个单词 里面的值, 所以这里的dp[j]非1即0 步骤二.推断状态方程: if d ...

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

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

  7. 139. 单词拆分 ——【Leetcode每日一题】

    139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典.请你判断是否可以利用字典中出现的单词拼接出 s . 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重 ...

  8. 代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分

    day46 139.单词拆分 1.确定dp数组以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字 ...

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

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

最新文章

  1. word2013插入excel对象报错_修改Word文档中嵌入的Excel对象
  2. 0417 jsBom操作+Dom再次整理
  3. python的快速入门-Python快速入门,你想要的就在这里了!
  4. ubuntu用不了root用户:~$ su - root Password: su: Authentication failure怎么办?
  5. python import re_Python标准库笔记(2) — re模块
  6. spring学习(38):注入set类型
  7. 操作类名-对象语法//操作类名-数组语法
  8. linux集群之LVS入门和企业级实战(续一)
  9. 东芝打印机共享怎么设置_东芝2303am网络打印设置教程
  10. VS的Qt界面预览和QtCreator的界面预览快捷键
  11. Navicat备份数据库和还原数据库详解
  12. 经济学金融学书籍推荐
  13. 东方联盟郭盛华发家史:8年来实现跨越式发展
  14. SAP官方培训课程级别和PA认证介绍
  15. hdu 5773 (The All-purpose Zero)
  16. 华为P50Pro怎么解锁huawei P50屏幕锁开机锁激活设备锁了应该如何强制解除鸿蒙系统刷机解锁方法流程步骤
  17. 女大学生的280块川西环游功略(含帐单)
  18. 【考研资料】计算机/软件各个大学的考研初试复试资料!附考研群!一直更新...
  19. 【转载】SaaS的行业概述及发展现状
  20. JavaScript中的scrollTop(js中的scrollTop,滚动到顶部,javascript滚动到顶部)

热门文章

  1. AgileEAS.NET 4.0重构裁剪,新的ORM、支持Linq,正式支持WPF,开放更多的接口
  2. linux 文件颜色的含义
  3. 在Nginx/Tengine服务器上安装SSL证书
  4. QUIC - 低时延互联网传输层协议
  5. 结构设计模式 - Flyweight设计模式(享元设计模式)
  6. Git教程--如何安装Git 如何高效地使用Git 合理使用Git分支
  7. 为 .net 生态贡献力量——制作并上传 nuget 包(内有独家彩蛋)
  8. jsdelivr 缓存刷新
  9. 如何使用Docker Volumes在基于Docker的应用程序上启用实时重新加载
  10. angular ui组件_使用Angular Material将现代UI组件添加到Angular项目中