给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。

说明:

  • 分隔时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

示例 1:

输入:s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
输出:
["cats and dog","cat sand dog"
]

示例 2:

输入:s = "pineapplepenapple"
wordDict = ["apple", "pen", "applepen", "pine", "pineapple"]
输出:
["pine apple pen apple","pineapple pen apple","pine applepen apple"
]
解释: 注意你可以重复使用字典中的单词。

示例 3:

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

class Solution {
public:
    vector<string> wordBreak(string s, vector<string>& wordDict) {
        unordered_map<string, vector<string>> m;
        return helper(s, wordDict, m);
    }
    vector<string> helper(string s, vector<string>& wordDict, unordered_map<string, vector<string>>& m) {
        if (m.count(s)) return m[s];
        if (s.empty()) return {""};
        vector<string> res;
        for (string word : wordDict) {
            if (s.substr(0, word.size()) != word) continue;
            vector<string> rem = helper(s.substr(word.size()), wordDict, m);
            for (string str : rem) {
                res.push_back(word + (str.empty() ? "" : " ") + str);
            }
        }
        return m[s] = res;
    }
};

140.单词拆分II相关推荐

  1. LeetCode 140. 单词拆分 II

    文章目录 解法1:回溯 + 记忆数组,记录当前字符串 解法2:回溯 + 记忆数组,记录索引 `i` 到字符结尾的字符串能拆分的组合 https://leetcode-cn.com/problems/w ...

  2. leetcode 140. Word Break II | 140. 单词拆分 II(动态规划)

    题目 https://leetcode.com/problems/word-break-ii/ 题解 由 leetcode 139. Word Break | 139. 单词拆分(动态规划) 改造而来 ...

  3. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

  4. leetcode 140. 单词拆分 II(记忆化)

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使用字典中的单 ...

  5. [leetcode] 140. 单词拆分 II

    class Solution {int n;vector<string>res;unordered_map<int,set<int>>hash;string s;v ...

  6. leetcode140. 单词拆分 II(回溯+记忆化)

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使用字典中的单 ...

  7. 代码随想录算法训练营第46天 | 动态规划 part08 ● 139.单词拆分 ● 关于多重背包 ● 背包问题总结篇

    #139 单词拆分 没做出来.我原来是把string放到dp里,不对,这种做法永远都不对.他问的是什么(能不能构成,true,false)就要放到dp里 (大部分题是这样)下面是不对的思路: 正确co ...

  8. 【每日一题】212. 单词搜索 II

    212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...

  9. 小米面试题:单词拆分

    题目: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中 ...

  10. 单词拆分—leetcode139

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没有重复 ...

最新文章

  1. Android projects on Github
  2. select case语句举例_图解Go select语句原理
  3. formdata传递参数_前端利用formData格式进行数据上传,前端formData 传值 和 json传值的区别?...
  4. (数据科学学习手札45)Scala基础知识
  5. 机翼翼尖_我所理解的流体力学 | 闲话翼尖涡
  6. 物理综合:Compile
  7. oracle 修改子分区,Oracle子分区(sub partition)操作
  8. Linux文件系统(四)---三大缓冲区之inode缓冲区 (内存inode映像 )
  9. Ubuntu 解决触摸板不识别问题
  10. 【STC单片机】STC15串口收发示例程序模板
  11. 计算机电子怎么安装,教你怎样自己组装电脑
  12. 【数字图像处理】-图像位数
  13. java 发卡器_充值发卡器
  14. 接入支付宝电脑网站支付实现JAVA版
  15. 用c语言编写一个完整的实现单链表,如何用c语言实现两个单链表的归并
  16. 《ERROR: MobSDK已停止支持非严格模式版本,请按上面编译告示接入合规版本》
  17. autojs定时运行任务的例子,设置定时器,或者循环检测时间都可以实现
  18. 关于智能车独轮组编码器的思考
  19. Element-UI框架多个el-input标签并排
  20. 办公知识分享:如何一次性批量重命名图片?这个方法非常简单

热门文章

  1. Scale-up and Scale-out
  2. 小猿圈之Python开发的技巧一?
  3. cocos2d-x 输入框CCEditBox的使用
  4. 云计算更适合小公司的八条原因
  5. JavaScript_高程三_01
  6. 周鸿祎的“流氓”可否借鉴?
  7. 病毒周报(100201至100207)
  8. Masm(1):资源文件定义
  9. 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
  10. 基于python的销售系统_python实现超市商品销售管理系统