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;
}