139.单词拆分

单词就是物品,字符串就是背包,就是问能不能把背包填满,又因为可以重复使用,所以是完全背包。同时本题求的是排列,所以先遍历背包,再遍历物品(物品就是用substr截取出的字符串)。

因为要进行查找操作,所以先把字符串数组转换成set。

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int n=s.size();
        unordered_set<string> wordset(wordDict.begin(),wordDict.end());
        vector<bool> dp(n,false);
        dp[0]=true;
        //求排列,先遍历背包再遍历物品
        for(int i=1;i<=n;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[n];
    }
};
07-09 06:22