• leetcode 139. 单词拆分


    39. 单词拆分

    给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

    注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

    示例 1:

    输入: s = "leetcode", wordDict = ["leet", "code"]
    输出: true
    解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。
    

    示例 2:

    输入: s = "applepenapple", wordDict = ["apple", "pen"]
    输出: true
    解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。
         注意,你可以重复使用字典中的单词。
    

    示例 3:

    输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
    输出: falses
    思路:

           //dp[j] 表示长度为j的字符串,有一个或多个wordDict里的字符串组成

            //dp[j] = true;就是其递推公式

            //初始化dp[0] = true; 其他为false

            //遍历顺序 先遍历背包再遍历物品,求排列数

            //打印dp数组

    代码:
    1. class Solution {
    2. public:
    3. bool wordBreak(string s, vector& wordDict) {
    4. //dp[j] 表示长度为j的字符串,有一个或多个wordDict里的字符串组成
    5. //dp[j] = true;就是其递推公式
    6. //初始化dp[0] = true; 其他为false
    7. //遍历顺序 先遍历背包再遍历物品,求排列数
    8. //打印dp数组
    9. unordered_set wordSet(wordDict.begin(), wordDict.end());
    10. vector<bool> dp(s.size() + 1, false);
    11. dp[0] = true;
    12. for (int i = 1; i <= s.size(); i++) { // 遍历背包
    13. for (int j = 0; j < i; j++) { // 遍历物品
    14. string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
    15. if (wordSet.find(word) != wordSet.end() && dp[j]) {
    16. dp[i] = true;
    17. }
    18. }
    19. }
    20. return dp[s.size()];
    21. }
    22. };

    还有很多瑕疵,还需继续坚持!

  • 相关阅读:
    Linux apt-get update - Could not connect to XXX(Connection refused)
    MySQL中将传参表名字符串转为sql语句执行
    swiper使用
    MySQL server has gone away
    简单好用的文档管理系统MinDoc
    Redis学习笔记——缓存更新策略
    Guetzli的原理
    SpringCloud接入nacos配置中心
    项目风险管理
    集合深度学习06—iterator 迭代器源码解析
  • 原文地址:https://blog.csdn.net/qq_63098229/article/details/133757868