题目一 139. 单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
思路
如果要转化为背包问题,字符串s就是背包,单词是否能组成s,就是物品是否能把背包装满。
- dp[i]: 字符串长度为i的话,为true,表示可以拆分为一个或多个在字典中出现的单词。
- 递归公式:dp[j] = true, 且[j, i]这个区间的子串出现在字典里,则dp[i]是true
- 初始化 dp[0] = true, 其他事false
- 遍历顺序,拆分为1个或多个,完全背包
var wordBreak = function(s, wordDict) {
const dp = Array(s.length + 1).fill(false);
dp[0] = true;
const len = s.length;
for (let i = 0; i <= len; i++) {
for (let j = 0; j < wordDict.length; j++) {
if (i >= wordDict[j].length) {
if (s.slice(i - wordDict[j].length, i) === wordDict[j] && dp[i - wordDict[j].length]) {
dp[i] = true;
}
}
}
}
return dp[len];
};