【LeetCode热题100】【动态规划】单词拆分

2024-04-20 11:05:03 浏览数 (2)

题目链接:139. 单词拆分 - 力扣(LeetCode)

看能不能用字符串列表里面的字符串组成这个字符串,可以反复使用

即完全背包问题,同之前的完全平方数、零钱兑换,相当于给定几个数,可以反复用,看能不能组成某个数

定义dp[i]是目标字符串中以i为结尾的子串能不能由某个字符串word组成,如果可以,问题变成dp[i-word.size()]

此处组合需要考虑顺序,target遍历外层循环

代码语言:javascript复制
class Solution {
public:
    bool wordBreak(string s, vector<string> &wordDict) {
        vector<bool> dp(s.size()   1);
        dp[0] = true;
        for (int i = 1; i <= s.size();   i)
            for (auto &word: wordDict) {
                int n = word.size();
                if (i - n >= 0 && s.substr(i - n, n) == word)
                    dp[i] = dp[i] || dp[i - n];
            }
        return dp[s.size()];
    }
};

0 人点赞