LeetCode 140. Word Break II

Solution1:我的答案
纯DFS,在第31个case时超时,还是记录一下。。

class Solution { // DFS
public:vector<string> wordBreak(string s, vector<string>& wordDict) {unordered_set<string> dict(wordDict.begin(), wordDict.end());vector<string> res;string temp = "";int start = 0;my_word(s, dict, res, temp, start);return res;}private:void my_word(string& s, unordered_set<string>& dict, vector<string>& res, string& temp, int start) {if (start == s.size()) {res.push_back(temp);return;} else {for (int i = start; i < s.size(); i++) {string temp_str = s.substr(start, i - start + 1);if (dict.count(temp_str)) {if (!temp.size())temp = temp_str;elsetemp += " " + temp_str;my_word(s, dict, res, temp, i + 1);if (temp.find(" ") != string::npos)temp = temp.substr(0, temp.size() - temp_str.size() - 1);elsetemp = "";}}}return;}
};

Solution2:
参考花花酱:https://zxi.mytechroad.com/blog/leetcode/leetcode-140-word-break-ii/
记忆化递归真牛逼啊!!!
Time complexity: O(2n)O(2n)O(2^n)
Space complexity: O(2n)O(2n)O(2^n)

// Author: Huahua
class Solution {
public:vector<string> wordBreak(string s, vector<string>& wordDict) {unordered_set<string> dict(wordDict.cbegin(), wordDict.cend());return wordBreak(s, dict);}
private:// >> append({"cats and", "cat sand"}, "dog");// {"cats and dog", "cat sand dog"}vector<string> append(const vector<string>& prefixes, const string& word) {vector<string> results;for(const auto& prefix : prefixes)results.push_back(prefix + " " + word);return results;}const vector<string>& wordBreak(string s, unordered_set<string>& dict) {// Already in memory, return directlyif(mem_.count(s)) return mem_[s];// Answer for svector<string> ans;// s in dict, add it to the answer arrayif(dict.count(s)) ans.push_back(s);for(int j=1;j<s.length();++j) {// Check whether right part is a wordconst string& right = s.substr(j);if (!dict.count(right)) continue;// Get the ans for left partconst string& left = s.substr(0, j);const vector<string> left_ans = append(wordBreak(left, dict), right);// Notice, can not use mem_ here,// since we haven't got the ans for s yet.ans.insert(ans.end(), left_ans.begin(), left_ans.end());}// memorize and returnmem_[s].swap(ans);return mem_[s];}
private:unordered_map<string, vector<string>> mem_;
};

【DFS + 记忆化递归】LeetCode 140. Word Break II相关推荐

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

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

  2. 【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph

    LeetCode 133. Clone Graph Solution1: DFS/记忆化递归,参考网址:http://www.cnblogs.com/grandyang/p/4267628.html ...

  3. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways

    LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...

  4. 140. Word Break II

    文章目录 1 题目理解 2 回溯+记忆化 1 题目理解 140与130的区别是,当字符串可分的时候,要求返回具体的分割字符串. 2 回溯+记忆化 对于字符串s,如果前面一部分是单词列表中的词,则拆分出 ...

  5. 【记忆化递归+DP】LeetCode 139. Word Break

    LeetCode 139. Word Break Solution1: 记忆化递归的典型套路题 参考网址:https://zxi.mytechroad.com/blog/leetcode/leetco ...

  6. LeetCode 87. 扰乱字符串(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...

  7. LeetCode 514. 自由之路(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...

  8. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  9. LeetCode 337. 打家劫舍 III(记忆化+递归)

    文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...

最新文章

  1. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
  2. 用于CUDA FFT的PyTorch包装器pytorch-fft
  3. Servlet开发配置
  4. 各类JDBC数据库连接方式
  5. 阅读分析下列html,阅读下列说明和 HTML 文本,分析其中嵌入的 JavaScript. 脚本..._考试资料网...
  6. Kogito,ergo规则:从知识到服务,轻松自如
  7. mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍_MySQL
  8. 容器中apscheduler不执行_APScheduler:定时任务框架
  9. 深度学习根据文字生成图片教程(附python代码)
  10. [php基础]Mysql日期函数:日期时间格式转换函数详解
  11. 音频压缩编码技术(四)—AAC编解码器
  12. PPT常用功能及其实现
  13. 如何通过广西税务12366缴纳城乡居民医保费用及下载缴费凭证?
  14. Ubuntu通过清华镜像源下载软件
  15. 感冒为什么会流鼻涕?
  16. 抖音开展大规模打击刷粉、刷量,账号广告导流行动
  17. 光环PgMP学友 | 4A成绩考过,学以致用才是“高分”!
  18. java导出word功能(包含图片)二
  19. DPU网络开发SDK—DPDK(六)
  20. JAVA编写的文档编辑器源代码

热门文章

  1. C++ Primer Plus学习(一)—— 基础知识
  2. python函数定义语法_python 函数基础 定义
  3. php公司共享 管理,php – 管理几个共享重叠函数和类的代码库
  4. kubectl mysql 集群_mysql-kubernetes
  5. NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
  6. linux arm fpu初始化,ARM处理器的浮点运算单元(FPU)
  7. java 定时程序扫描表_Java扫描程序类
  8. 如何使用Python numpy.where()方法
  9. Java列表add()和addAll()方法
  10. java在数组中放入随机数_如何在Java中随机播放数组