目录
LeetCode 139.单词拆分
文章讲解:代码随想录
视频讲解:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili
力扣题目:LeetCode 139.单词拆分
动态规划五步曲:
1.确定dp[i]的含义
dp[i]:字符串长度为i,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。
2.找出递推公式
if(set.contains(s.substring(j,i)) && valid[j]) valid[i] = true;
3.初始化dp数组
dp[0] = true;
4.确定遍历顺序
外循环为遍历背包,内循环为遍历物品
5.打印dp数组
代码如下(Java):
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
HashSet<String> set = new HashSet<>(wordDict);
boolean[] valid = new boolean[s.length() + 1];
valid[0] = true;
for(int i = 1; i <= s.length(); i++){
for(int j = 0; j < i && !valid[i]; j++){
if(set.contains(s.substring(j,i)) && valid[j]){
valid[i] = true;
}
}
}
return valid[s.length()];
}
}
多重背包相关知识点
文章讲解:代码随想录