LeetCode Word Break II DP+DFS
2015-09-06 22:30
260 查看
思路:
DP+DFS。
DP去找到可以切分的点,DFS根据DP提供的信息拼接单词。
DP+DFS。
DP去找到可以切分的点,DFS根据DP提供的信息拼接单词。
class Solution { public: void dfs(vector<string> &ans, string &s, unordered_set<string> &wordDict, string str, int idx, vector<bool> &dp) { string substr; for(int len = 1; idx + len <= s.length(); ++len) { if(dp[idx + len] && wordDict.count(s.substr(idx, len)) == 1) { substr = s.substr(idx, len); if(idx + len < s.length()) { dfs(ans, s, wordDict, str + substr + " ", idx + len, dp); }else { ans.push_back(str + substr); return; } } } } vector<string> wordBreak(string s, unordered_set<string>& wordDict) { vector<string> ans; if(wordDict.size() == 0) return ans; vector<bool> dp(s.size() + 1, false); dp[0] = true; //判断是否可以切分 for(int i = 1; i <= s.size(); ++i) { for(int j = i - 1; j >= 0; --j) { if(dp[j]) { string temp = s.substr(j, i - j); if(wordDict.find(temp) != wordDict.end()) { dp[i] = true; break; } } } } //如果可以切分,DFS去切分 if(dp[s.size()]) { dfs(ans, s, wordDict, "", 0, dp); } return ans; } };
相关文章推荐
- Processing 练习(4) - 鼠标控制颜色
- TCP的发送系列 — tcp_sendmsg()的实现(一)
- 【翻译自mos文章】在物理dg中对RFS进程进行trace的方法
- ios开发FMDB导入SQLCipher加密数据库
- C#------CURD
- 数学史
- z字形矩阵输出
- 51nod 1305:Pairwise Sum and Divide
- Spark SQL Relational Data Processing in Spark (学习笔记)
- 第二次作业
- 51nod 1305:Pairwise Sum and Divide
- 菜鸟成长_01--andriod模拟器sdcard上传图片失败无法显示
- 对软件架构设计的一些总结和理解
- 【CCF】字符串匹配
- 使用jvisualvm来远程观察Java程序及jvisualvm插件[转]
- mongodb简要教程
- Iterated Tverberg Point-Theory
- 基于 TCP 协议的并发服务器程序
- poj-2826 An Easy Problem?!
- scrapy简明教程