[LeetCode] 140. Word Break II
来源:互联网 发布:polycom软件下载 编辑:程序博客网 时间:2024/05/21 04:42
思路:
这题做出来以后成就感爆棚啊…第一个是我写的一个标准DFS, 但过不去大样本, 会超时. 第二个版本是借助Word Break http://blog.csdn.net/hiimdaosui/article/details/52457700 里面的DP数组做剪枝, 这样就可以过大样本了.
void dfs(vector<string>& res, string& candidate, string& s, unordered_set<string>& wordDict, int start) { if (start == s.length()) { candidate.pop_back(); res.push_back(candidate); return; } for (int i = start; i < s.length(); i++) { string temp = candidate; string cur = s.substr(start, i - start + 1); if (wordDict.count(cur)) { candidate += cur + " "; dfs(res, candidate, s, wordDict, i + 1); candidate = temp; } } } vector<string> wordBreak(string s, unordered_set<string>& wordDict) { vector<string> res; string candidate = ""; dfs(res, candidate, s, wordDict, 0); return res; }
void dfs(vector<string>& res, string& candidate, string& s, unordered_set<string>& wordDict, int start, bool breakable[]) { if (start == s.length()) { candidate.pop_back(); res.push_back(candidate); return; } for (int i = start; i < s.length(); i++) { string cur = s.substr(start, i - start + 1); if (breakable[i + 1] && wordDict.count(cur)) { string temp = candidate; candidate += cur + " "; dfs(res, candidate, s, wordDict, i + 1, breakable); candidate = temp; } }}vector<string> wordBreak(string s, unordered_set<string>& wordDict) { int slen = s.length(); vector<string> res; if (! slen) return res; bool breakable[slen + 1] = {0}; breakable[0] = true; for (int i = 1; i <= slen; i++) { for (int j = 0; j < i; j++) { string cur = s.substr(j, i - j); if (breakable[j] && wordDict.count(cur)) { breakable[i] = true; break; } } } string candidate = ""; if (breakable[slen]) dfs(res, candidate, s, wordDict, 0, breakable); return res;}
0 0
- [leetcode] 140.Word Break II
- LeetCode 140. Word Break II
- LeetCode 140. Word Break II
- leetcode.140. Word Break II
- LeetCode 140. Word Break II
- [LeetCode] 140. Word Break II
- 【LeetCode】140. Word Break II
- leetcode 140. Word Break II
- Leetcode 140. Word Break II
- leetcode 140. Word Break II
- [leetcode]Word Break II
- LeetCode:Word Break II
- Leetcode: Word Break II
- [LeetCode] Word Break II
- [LeetCode]Word Break II
- LeetCode | Word Break II
- [LeetCode] - Word Break II
- LeetCode - Word Break II
- spark Streaming 实例
- Linux安装android开发环境
- 分析函数——FIRST_VALUE()和LAST_VALUE()
- HDOJ 5744 Keep On Movin
- git与svn对比
- [LeetCode] 140. Word Break II
- RxJava操作符(一)Creating Observables
- Genymotion安装与集成开发指南
- 浙大PAT甲级 1106 广度优先搜索
- VT系列二:检测是否支持虚拟化
- 设置EditText 游标的位置
- iReport报表开发
- RxJava操作符(二)Transforming Observables
- Cassandra入门