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"]
.
这题有点难,我只贴出DFS的版本,没过TLE。
这种DFS其实是回溯,backtracing
vector<string> result;
bool contain(unordered_set<string> &dict, string s)
{
unordered_set<string>::iterator ite = dict.find(s);
if(ite != dict.end())
return true;
else
return false;
}
void f(string s,string temp,unordered_set<string> &dict){
if(contain(dict,s)){
if(temp!="")
result.push_back(temp+" "+s);
else
result.push_back(s);
}
for(int i=0;i<s.length();i++){
string s0=s.substr(0,i+1);
if(contain(dict,s0)){
if(temp!="")
f(s.substr(i+1),temp+" "+s0,dict);
else
f(s.substr(i+1),temp+s0,dict);
}
}
}
vector<string> wordBreak(string s, unordered_set<string> &dict) {
f(s,"",dict);
return result;
}