https://leetcode.com/problems/word-break-ii/description/
DFS当然是会挂的,开始竟然写记忆化dfs没思路.,.... 手生太厉害,老了
class Solution {
public:
vector<string> wordBreak(string s, vector<string>& wordDict) {
unordered_set <string> dict;
unordered_map <string, vector<string> > mem;
for (int i = 0; i < wordDict.size(); i++) {
dict.insert( wordDict[i] );
}
dfs(s, s.size() - 1, dict, mem);
return mem[s];
}
vector<string> dfs( string s, int cur, unordered_set <string> &dict, unordered_map <string, vector<string> >& mem ) {
if (cur < 0) {
return vector<string>();
}
string cur_str = s.substr(0, cur+1);
if (mem.find(cur_str) != mem.end()) return mem[cur_str];
else mem[cur_str] = vector<string>();
string tmp;
for (int i = 0; i <= cur; i++) {
tmp = s.substr(i, cur - i +1);
if (dict.find(tmp) != dict.end()) {
vector<string> a = dfs(s, i - 1, dict, mem);
for (int k = 0; k < a.size(); k++) {
mem[cur_str].push_back( a[k] == ""?tmp: a[k] + " " + tmp );
}
if (tmp == cur_str)
mem[cur_str].push_back(tmp);
}
}
return mem[cur_str];
}
};