当前位置:网站首页>LeetCode_139_单词拆分
LeetCode_139_单词拆分
2022-08-02 12:23:00 【Fitz1318】
题目链接
题目描述
给你一个字符串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
提示:
1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s
和wordDict[i]
仅有小写英文字母组成wordDict
中的所有字符串 互不相同
解题思路
动态规划五部曲
确定
dp
数组及下标的含义dp[i]
:字符串长度为i
,dp[i] = true
,则表示可以采用还分为一个或多个在字典中出现的单词
确定递推公式
- 如果
dp[i] = true
,且[i,j]
这个区间的子串出现在字典里,那么dp[j] = true
- 如果
数组初始化
dp[0] = true
- 其他初始化为
false
确定遍历顺序
- 外层for循环遍历物品,内层for循环遍历背包
举例推导
dp[i]
AC代码
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if (wordDict.contains(s.substring(j, i)) && dp[j]) {
dp[i] = true;
}
}
}
return dp[s.length()];
}
}
边栏推荐
猜你喜欢
随机推荐
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!
【Acunetix-Forgot your password】
智能图像分析-智能家用电器图像目标检测统计计数检测与识别-艾科瑞特科技(iCREDIT)
ABAP-OOAVL模板程序
Create your own app applet ecosystem with applet containers
[kali-information collection] (1.9) Metasploit + search engine tool Shodan
SQL Server2019安装步骤及脱机安装Microsoft机器学习组件下一步不能继续的问题
Process finished with exit code 1
Seneor Exposure Basics
力扣151-颠倒字符串中的单词
An example of type3 voltage loop compensator taking Boost as an example
Thymeleaf
Thymeleaf
redis cluster cluster, the ultimate solution?
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
QAbstractScrollArea、QScrollArea
技术分享| 融合调度系统中的电子围栏功能说明
WebUI自动化测试框架搭建从0到1(完整源码)更新完毕
Likou 35 - search for insertion position - binary search
Intelligent Image Analysis-Intelligent Home Appliance Image Target Detection Statistical Counting Detection and Recognition-iCREDIT