第九章 动态规划part08
139. 单词拆分
给你一个字符串 s
和一个字符串列表 wordDict
作为字典。请你判断是否可以利用字典中出现的单词拼接出 s
。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
关于字符串类型的题目还是很不熟悉,重新回顾了之前写过的131. 分割回文串使用回溯法解决。
已经忘记了字典需要先转化为unordered_set<string>,从而可以直接在其中find单词。
使用回溯法解决本题部分案例无法通过,使用动态规划:
注意递推公式推导。
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);if(wordSet.find(word)!=wordSet.end()&&dp[j]){dp[i]=true;}}}return dp[s.size()];}
};
二刷字符串问题要重点掌握。
多重背包
多一个for循环遍历物品个数
背包总结
代码随想录