单词拆分(动态规划)
题目
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:
1、拆分时可以重复使用字典中的单词。
2、你可以假设字典中没有重复的单词。
示例 :
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。
注意点
1、动态方程dp[n] :表示前n个字符串是否可以用字典中的单词表示;(比如:dp[0]表示空字符串是否可以用字典中的单词表示)
2、初始化动态规划方程;(dp[0]为true,其他默认为false)
3、更新动态规划方程
- 从头开始遍历非空字符串 s ;
- 判断从0(dp[0])开始的的某段字符串是否可以用字典中的单词表示;
1、不能表示,则继续寻找,直到字符串s遍历结束;
2、可以表示,则更新动态规划方程,并更新起点。(比如:遍历到 leetcode 的 t,则更新dp[4] = true,开始节点更新为s.subString(4, j)(字符c))
实现
public boolean wordBreak(String s, List<String> wordDict) {// 将字典更新为set类型,便于判断单词是否在字典中Set<String> wordDictSet = new HashSet<>(wordDict);// 初始化动态规划方程boolean[] dp = new boolean[s.length() + 1];// 第一位默认true(表示空单词在字典中)dp[0] = true;// 遍历更新动态规划方程for (int i = 1; i <= s.length(); i ++) {for (int j = 0; j < i; j ++) {// 判断某一段单词是否在字典中if (dp[j] && wordDictSet.contains(s.substring(j, i))) {// 存在,则将标志位设置为truedp[i] = true;// 寻找下一段是否在字典中break;}}}// 返回结果return dp[s.length()];}
单词拆分(动态规划)相关推荐
- LeetCode 139. 单词拆分(动态规划)
题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典 ...
- 101. Leetcode 139. 单词拆分 (动态规划-完全背包)
步骤一.确定状态: 确定dp数组及下标含义 dp[j]表示的是长度为j的字符串(容量为j的背包)能否被拆分成1个或者多个单词 里面的值, 所以这里的dp[j]非1即0 步骤二.推断状态方程: if d ...
- leetcode 140. Word Break II | 140. 单词拆分 II(动态规划)
题目 https://leetcode.com/problems/word-break-ii/ 题解 由 leetcode 139. Word Break | 139. 单词拆分(动态规划) 改造而来 ...
- LeetCode--139. 单词拆分(动态规划)
单词拆分(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题的难点在于示例3,字符串包含字典中的所有单词,但是就是 ...
- 动态规划——单词拆分(Leetcode 139)
题目选自Leetcode 139.单词拆分 问题描述: 解题思路: 怎么想到用动态规划的? 题目的相关标签中有动态规划.(QAQ) dp数组怎么选? dp[i]: 表示子串s[0:i] 是否全部能拆分 ...
- 代码随想录算法训练营第46天 | 动态规划 part08 ● 139.单词拆分 ● 关于多重背包 ● 背包问题总结篇
#139 单词拆分 没做出来.我原来是把string放到dp里,不对,这种做法永远都不对.他问的是什么(能不能构成,true,false)就要放到dp里 (大部分题是这样)下面是不对的思路: 正确co ...
- 代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分
day46 139.单词拆分 1.确定dp数组以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字 ...
- 代码随想录算法训练营第五十天|动态规划:139.单词拆分、多重背包理论基础、背包问题总结
[139.单词拆分] 这个题目是一个背包问题.但是他稍微有点不太一样.在于这题判断能否装满背包是在判断单词是否出现在字典中,如果出现,就代表能装满. 背包是长度为i的字符串 物品是长度为i-j的子串 ...
- 小米面试题:单词拆分
题目: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中 ...
- 单词拆分—leetcode139
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没有重复 ...
最新文章
- MariaDB 10的复制 集群 高可用搭建 大表拆分【持续更新中】
- DeDeCMS后台批量修改替换sql语句大全
- [转载] Python中字符串的处理方法
- 第三百八十一节,Django+Xadmin打造上线标准的在线教育平台—xadmin全局配置
- mysql pt kill脚本_mysql 案例 ~ pt-kill工具的使用
- ai背景合成_视频素材不好找!图片也能生成视频啦,AI剪辑助力原创短视频创作...
- Excel图表如何更改坐标轴最大值
- PHP汉字转化为拼音
- Theano入门神经网络(一)
- 中国正从法律入手编织公民信息保护网
- 期货公司开户实力经纪业务的规模
- 稳压二极管原理、参数、动态电阻特性
- 深度置信(信念)网络DBN(Deep Belief Network)
- 喝酒神器微信小程序源码 支持流量主解锁多人对战
- 观影感受 之 《都挺好》
- centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
- DFS and BFS
- 6.stm32 低功耗设计--总结
- 2.爬虫之xpath选择器selenium模块
- DEAP dataset数据集 SEED dataset数据集
热门文章
- Unity3d 根据布线,自动生成碰撞墙
- java 51_学习java第51天
- node爬取app数据_从零开始写一个node爬虫(上)—— 数据采集篇
- 万字长文带你轻松了解LSTM全貌
- 在线打包app平台以及流程平台分析(AndroidiOS)
- 2022-2028全球与中国陆地和海洋测绘市场现状及未来发展趋势
- 【word】双栏写作如何调整为写满左栏再写右栏
- PHPWAMP站点管理的“域名模式”和“端口模式”详解、均支持自定义
- STM32学习笔记1(初识STM32)
- 如何实现gerrit的垃圾回收功能