一:题目
二:上码
class Solution {
public:/**思路:1.分析题意单词就是物品;字符串就是背包;单词能否组成字符串就是在问,物品能不能将背包装满单词可以重复使用那么说明这是一个完全背包2.动态规划五步走1>:确定dp数组的与下标的含义(这里用下标i是由我们的遍历顺序决定的)dp[i] 表示的是 字符串长度为i的话 dp[i] = true;长度为i的字符串是可以拆分为一个或者多个在字典中出现的单词 2>:确定dp状态转移公式如果dp[j]是true的话 那么在[j,i]这个区间我们截取的字符串是出现在字典中的,那么dp[i]一定是true0-j是true的话 也就是字符串前面的字符出现在字典中,然后我们后面截取的字符串[i,j]也在字典中,那么我们就可以确定dp[i] = true 也就是长度为i的字符串一定出现在字典中3>:确定dp数组的初始化我们应该确定其该开始的时候都为false,因为我们还未开始查找 但是我们的dp[0]一定要为true 因为我们在计算的时候是需要前面的dp[j]=true的 否则将都会是false4>:确定dp数组的遍历顺序外层遍历背包;内层遍历物品5>:*/bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> ans(wordDict.begin(),wordDict.end());vector<bool> dp(s.size()+1,false);dp[0] = true;for(int i = 0; i <= s.size(); i++) {//遍历字符串也就是背包for(int j = 0; j < i; j++) {//遍历物品string str = s.substr(j,i-j);//从j开始 由i-j个字符if(ans.find(str) != ans.end() && dp[j] == true) dp[i] = true;}}return dp[s.size()];}
};
动态规划做的不少了 换个类型就不会了 我可能是个智障 略略略略略略