经典递归
2016-05-04 22:42
246 查看
Given a string s and a dictionary of words dict, add spaces in
s to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s ="catsanddog",
dict =["cat", "cats", "and", "sand", "dog"].
A solution is["cats and dog", "cat sand dog"].
#include <iostream>
#include<map>
#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<string>
using namespace std;
vector<string> combine(string s,vector<string> prev)
{
for(int i = 0; i < prev.size(); ++ i)
{
prev[i] += " " + s;
}
return prev;
}
vector<string> wordBreak(string s, unordered_set<string>& wordDict)
{
vector<string> res;
if(wordDict.count(s))
{
res.push_back(s);
}
for(int i = 1; i < s.size(); ++ i)
{
string back = s.substr(i);
if(wordDict.count(back))
{
string prev = s.substr(0,i);
vector<string> pre = combine(back,wordBreak(prev,wordDict));
res.insert(res.end(),pre.begin(),pre.end());
}
}
return res;
}
int main()
{
//dict =["cat", "cats", "and", "sand", "dog"].
cout << "Hello world!" << endl;
string s="catsanddog";
unordered_set<string>A;
A.insert("cat");
A.insert("cats");
A.insert("and");
A.insert("sand");
A.insert("dog");
wordBreak(s,A);
return 0;
}
s to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s ="catsanddog",
dict =["cat", "cats", "and", "sand", "dog"].
A solution is["cats and dog", "cat sand dog"].
#include <iostream>
#include<map>
#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<string>
using namespace std;
vector<string> combine(string s,vector<string> prev)
{
for(int i = 0; i < prev.size(); ++ i)
{
prev[i] += " " + s;
}
return prev;
}
vector<string> wordBreak(string s, unordered_set<string>& wordDict)
{
vector<string> res;
if(wordDict.count(s))
{
res.push_back(s);
}
for(int i = 1; i < s.size(); ++ i)
{
string back = s.substr(i);
if(wordDict.count(back))
{
string prev = s.substr(0,i);
vector<string> pre = combine(back,wordBreak(prev,wordDict));
res.insert(res.end(),pre.begin(),pre.end());
}
}
return res;
}
int main()
{
//dict =["cat", "cats", "and", "sand", "dog"].
cout << "Hello world!" << endl;
string s="catsanddog";
unordered_set<string>A;
A.insert("cat");
A.insert("cats");
A.insert("and");
A.insert("sand");
A.insert("dog");
wordBreak(s,A);
return 0;
}
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析