代码随想录算法训练营第46天|139.单词拆分

leetcode139.单词拆分

题目描述:给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

思路:排列完全背包。背包就是字符串s,物品就是列表中的单词。

第一步dp含义:dp【i】=true:s中的前i个单词都可以由列表中的单词拼出来。

第二步递推公式:

如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i )。

所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。

第三步初始化:解题需要dp【0】设置为true其他为false

第四步遍历顺序:排列完全背包就是先背包后物品。

class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
        vectordp(s.size()+1,false);
        dp[0]=true;
        for(int i=1;i<=s.size();i++)
        {
            for(int j=0;j

你可能感兴趣的:(算法,leetcode,c++)