【DFS + 记忆化递归】LeetCode 140. Word Break II
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相关推荐
- leetcode 140. Word Break II | 140. 单词拆分 II(动态规划)
题目 https://leetcode.com/problems/word-break-ii/ 题解 由 leetcode 139. Word Break | 139. 单词拆分(动态规划) 改造而来 ...
- 【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph
LeetCode 133. Clone Graph Solution1: DFS/记忆化递归,参考网址:http://www.cnblogs.com/grandyang/p/4267628.html ...
- 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...
- 140. Word Break II
文章目录 1 题目理解 2 回溯+记忆化 1 题目理解 140与130的区别是,当字符串可分的时候,要求返回具体的分割字符串. 2 回溯+记忆化 对于字符串s,如果前面一部分是单词列表中的词,则拆分出 ...
- 【记忆化递归+DP】LeetCode 139. Word Break
LeetCode 139. Word Break Solution1: 记忆化递归的典型套路题 参考网址:https://zxi.mytechroad.com/blog/leetcode/leetco ...
- LeetCode 87. 扰乱字符串(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...
- LeetCode 514. 自由之路(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- LeetCode 337. 打家劫舍 III(记忆化+递归)
文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...
最新文章
- 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
- 用于CUDA FFT的PyTorch包装器pytorch-fft
- Servlet开发配置
- 各类JDBC数据库连接方式
- 阅读分析下列html,阅读下列说明和 HTML 文本,分析其中嵌入的 JavaScript. 脚本..._考试资料网...
- Kogito,ergo规则:从知识到服务,轻松自如
- mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍_MySQL
- 容器中apscheduler不执行_APScheduler:定时任务框架
- 深度学习根据文字生成图片教程(附python代码)
- [php基础]Mysql日期函数:日期时间格式转换函数详解
- 音频压缩编码技术(四)—AAC编解码器
- PPT常用功能及其实现
- 如何通过广西税务12366缴纳城乡居民医保费用及下载缴费凭证?
- Ubuntu通过清华镜像源下载软件
- 感冒为什么会流鼻涕?
- 抖音开展大规模打击刷粉、刷量,账号广告导流行动
- 光环PgMP学友 | 4A成绩考过,学以致用才是“高分”!
- java导出word功能(包含图片)二
- DPU网络开发SDK—DPDK(六)
- JAVA编写的文档编辑器源代码
热门文章
- C++ Primer Plus学习(一)—— 基础知识
- python函数定义语法_python 函数基础 定义
- php公司共享 管理,php – 管理几个共享重叠函数和类的代码库
- kubectl mysql 集群_mysql-kubernetes
- NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
- linux arm fpu初始化,ARM处理器的浮点运算单元(FPU)
- java 定时程序扫描表_Java扫描程序类
- 如何使用Python numpy.where()方法
- Java列表add()和addAll()方法
- java在数组中放入随机数_如何在Java中随机播放数组