题目链接:139. 单词拆分 - 力扣(LeetCode)
看能不能用字符串列表里面的字符串组成这个字符串,可以反复使用
即完全背包问题,同之前的完全平方数、零钱兑换,相当于给定几个数,可以反复用,看能不能组成某个数
定义dp[i]是目标字符串中以i为结尾的子串能不能由某个字符串word组成,如果可以,问题变成dp[i-word.size()]
此处组合需要考虑顺序,target遍历外层循环
代码语言:javascript复制class Solution {
public:
bool wordBreak(string s, vector<string> &wordDict) {
vector<bool> dp(s.size() 1);
dp[0] = true;
for (int i = 1; i <= s.size(); i)
for (auto &word: wordDict) {
int n = word.size();
if (i - n >= 0 && s.substr(i - n, n) == word)
dp[i] = dp[i] || dp[i - n];
}
return dp[s.size()];
}
};