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; }
原文地址:http://blog.csdn.net/ffmpeg4976/article/details/44903717