动态规划
一、单词拆分
1.回溯法暴力搜索
2.转化为背包问题,同时为求排列,所以先遍历背包,再遍历物品。背包容量相当于目标字符串,转化为能否装满背包问题,完全背包
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
//能否装满这个背包
unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
vector<bool> dp(s.size() + 1, false);
dp[0] = true;
for (int i = 1; i <= s.size(); i++) { // 遍历背包
for (int j = 0; j < i; j++) { // 遍历物品
string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
if (wordSet.find(word) != wordSet.end() && dp[j]) {
dp[i] = true;
}
}
}
return dp[s.size()];
}
};
总结
背包问题需要总结
学习时间90min。
学习资料:《代码随想录》。