首页 > 编程语言 >算法随想Day41【动态规划】| LC139-单词拆分

算法随想Day41【动态规划】| LC139-单词拆分

时间:2023-03-18 12:33:41浏览次数:40  
标签:LC139 遍历 apple 单词 pen dp wordDict 随想 Day41

LC139. 单词拆分

dp[i]含义 : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词

遍历顺序:如题说,是拆分为一个或多个在字典中出现的单词,所以这是完全背包

  • 如果求组合数就是外层for循环遍历物品,内层for遍历背包
  • 如果求排列数就是外层for遍历背包,内层for循环遍历物品

本题其实我们求的是排列数,为什么呢。 拿 s = "applepenapple", wordDict = ["apple", "pen"] 举例。

"apple", "pen" 是物品,那么我们要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。

"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序

所以说,本题一定是 先遍历 背包,再遍历物品。

img

bool wordBreak(string s, vector<string>& wordDict)
{
    int size = s.size();
    unordered_set<string> uset(wordDict.begin(), wordDict.end());
    vector<bool> dp(size + 1, false);
    dp[0] = true;
    for (int i = 1; i <= size; ++i)
    {
        for (int j = 0; j < i; ++j)
        {
            string str = s.substr(j, i - j);
            if (uset.find(str) != uset.end() && dp[j])
            {
                dp[i] = true;
            }
        }
    }
    return dp[size];
}

标签:LC139,遍历,apple,单词,pen,dp,wordDict,随想,Day41
From: https://www.cnblogs.com/Mingzijiang/p/17229721.html

相关文章