1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: vector<string> wordBreak(string s, vector<string>& wordDict) { unordered_set<string> set(wordDict.begin(), wordDict.end()); vector<string> ret; vector<string> st; backTrack(s, s.size(), 0, set, ret, st); return ret; } private: void backTrack(string& s, int sz, int start, unordered_set<string>& set, vector<string>& ret, vector<string>& st) { if(start == sz) { string r; for(auto& str : st) r += str + " "; r.pop_back(); ret.push_back(r); return; } int end = start; while(end < sz) { auto cur = s.substr(start, end - start + 1); if(set.count(cur)) { st.push_back(cur); backTrack(s, sz, end + 1, set, ret, st); st.pop_back(); } ++end; } } };
|