算法训练营day46_动态规划(3.16提前写)
139.单词拆分
麻了,思路对的,明显的完全背包,代码实现上一直犯迷糊;
首先!单词组合有顺序,外层循环背包;
其次,第i个物品选的条件是,长度小于背包且从s里截取子串(从j倒着截),应该跟word[i]相等(写的时候脑子有毛病);
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
vector<bool> f(310,false);
f[0]=true;
for(int j=1;j<=s.size();j++){
for(int i=0;i<wordDict.size();i++){
if(j>=wordDict[i].size()){
string t=s.substr(j-wordDict[i].size(),wordDict[i].size());
if(t==wordDict[i]) f[j]=f[j]||f[j-wordDict[i].size()];
}
}
}
return f[s.size()];
}
};