您的位置:首页 > 其它

经典递归

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 递归搜索