当前位置: 首页 > ai >正文

力扣HOT100之动态规划:139. 单词拆分


这道题之前刷代码随想录的时候已经做过了,但是现在再做一遍还是不会,直接去看视频了。感觉这道题的dp数组很难想到,感觉做不出来也是情有可原吧。这道题目也是一个完全背包问题,字典里的单词就相当于物品,而字符串相当于背包,这道题可以理解为:能否用现有的物品恰好装满整个背包?接下来直接写动规五部曲:
1.确定dp[i]的含义:在字符串的长度为i的情况下,该字符串能否用字典中的单词拼接出来
2.确定递推公式 dp[i] = dp[j, i] is in wordDict && dp[j] == true
3.dp数组初始化 dp[0] = true (无意义,只是为了递推正常进行下去)
4.确定遍历顺序:先背包,再物品(涉及排列)
5.打印数组(省略)
首先dp数组的意义就很有意思:我们逐步增加字符串的长度(背包容量),直至恢复字符串本来的长度,然后我们在逐渐增加字符串长度的过程中不停地判断当前字符串能否被字典里的单词组成,很显然,假设字符串能够被字典中的单词组成,我们就一定可以在字符串长度增加到一定程度时,发现其正好与字典中的某个单词完全相等,我们将该长度时对应的dp数组位置设置为true,然后再进一步增加字符串的长度。我们可以想象:当字符串长度为i时,前面的某一节s[0] ~ s[j - 1]可以与字典内的单词完全匹配,我们只需要判断s[j] ~s[i]这一段能否与字典中的单词匹配即可,如果能找到这样一个j,使得dp[j] == trues[j] ~s[i]这一段也能在字典中找到时,则说明字符串长度为i时,可以用字典中的单词组成,当逐渐将单词的长度扩大到原有的长度时,我们只需要判断dp[s.size()]是否为true即可。

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {//1.确定dp[i]的含义:在字符串的长度为i的情况下,该字符串能否用字典中的单词拼接出来//2.确定递推公式  dp[i] = dp[j, i] is in wordDict && dp[j] == true//3.dp数组初始化 dp[0] = true   //无意义,只是为了递推正常进行下去//4.确定遍历顺序:先背包,再物品(涉及排列)//5.打印数组(省略)int m = s.size();vector<bool> dp(m + 1, false);//初始化dp[0] = true;for(int i = 1; i <= s.size(); i++){  //遍历背包for(int j = 0; j < i; j++){  //遍历物品string sub = s.substr(j, i - j);   //从下标为j处取长度为i - j的子串if(find(wordDict.begin(), wordDict.end(), sub) != wordDict.end() && dp[j])dp[i] = true;}}return dp[m];}
};
http://www.xdnf.cn/news/10163.html

相关文章:

  • Spring之循环依赖源码解析
  • 现代数据湖架构全景解析:存储、表格式、计算引擎与元数据服务的协同生态
  • MySQL数据库复合查询
  • JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
  • 德拜温度热容推导
  • python:PyMOL 使用教程 及实用示例
  • 医疗多模态共情推理与学习一体化网络构成初探
  • Redisson学习专栏(四):实战应用(分布式会话管理,延迟队列)
  • 基于Python学习《Head First设计模式》 第一章 策略模式
  • 机器学习03-色彩空间:RGB、HSV、HLS
  • 2024 CKA模拟系统制作 | Step-By-Step | 20、题目搭建-节点维护
  • IEEE P370:用于高达 50 GHz 互连的夹具设计和数据质量公制标准
  • 芯片:数字时代的算力引擎——鲲鹏、升腾、海光、Intel 全景解析
  • 【递归、搜索与回溯算法】综合练习(二)
  • 跳动的爱心
  • USB MSC
  • 【大模型面试每日一题】Day 32:位置编码的改进方向与Rotary Position Embedding的核心优势
  • Augment vs Cursor:当Cursor解决不了问题时的最佳补充方案
  • CPT302-2425-S2-Multi-Agent Systems
  • Java基础 Day25
  • C++中IO类条件状态知识详解和注意事项
  • github访问慢
  • shell中与>和<相关的数据流重定向操作符整理
  • Q: dify知识库模块主要库表和字段
  • cf每日刷题c++
  • centos7.6阿里云镜像各个版本介绍
  • 【软件安装那些事 3 】CAD(2026 V60.7z) 安装教程(中文简体版)步骤完整不跳步 { 附软件提取下载链接,永久有效---------百度网盘 }
  • @Pushgateway配置与使用
  • 广东省林学会新办林业造林资质具体条件?
  • 1 Studying《Java编程思想》