当前位置:网站首页>LeetCode_139_word split
LeetCode_139_word split
2022-08-02 12:32: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
,it means that it can be divided into one or more words that appear in the dictionary
确定递推公式
- 如果
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()];
}
}
边栏推荐
猜你喜欢
随机推荐
Technology sharing | Description of the electronic fence function in the integrated dispatching system
numpy&pands 中的unique
The use of QListView
力扣27-移除元素——简单题
软件成分分析:手握5大能力守护软件供应链安全
FreeRTOS--栈实验
力扣704-二分查找
pig4cloud服务架构使用
Lexicon 27 - Remove Elements - Simple Questions
NVIDIA NeMo Metrics 轻量性能采集系统
Create your own app applet ecosystem with applet containers
测试开发之路,我在大厂做测试这四年的感悟
Intelligent Image Analysis-Intelligent Home Appliance Image Target Detection Statistical Counting Detection and Recognition-iCREDIT
After Effects 教程,如何在 After Effects 中对蒙版进行动画绘制?
js半圆环加载进度动画js特效
Data Lake (3): Hudi Concept Terminology
1.3快速生成树协议RSTP
js九宫格样式抽奖插件
手撸架构,MongDB 面试50问
Manual architecture, Mysql interview 126 questions