Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. class Solution {
  2. public:
  3. unordered_map<string, vector<string>> memo;
  4.  
  5. vector<string> wordBreak(string s, vector<string>& wordDict) {
  6. unordered_map<string, int> set;
  7. unordered_map<string, vector<string>> memo;
  8. for (const auto& word : wordDict) {
  9. set[word]++;
  10. }
  11. return back(s, set);
  12. }
  13.  
  14.  
  15. vector<string> back(string s, unordered_map<string, int>& set) {
  16. if (memo[s].size() != 0) {
  17. return memo[s];
  18. }
  19.  
  20. vector<string> result;
  21. //std::cout << "Having s = " << s << "\n";
  22. for (int i = 1; i <= s.length(); ++i) {
  23. string tmp = s.substr(0, i);
  24. if (set[tmp] != 0) {
  25. //std::cout << "Got : " << tmp << " trying: " << s.substr(i) << "\n";
  26. string rest = s.substr(i);
  27. if (rest != "") {
  28. const auto& restResult = back(rest, set);
  29. for (auto r : restResult) {
  30. result.push_back(tmp + " " + r);
  31. }
  32. } else {
  33. result.push_back(tmp);
  34. }
  35.  
  36. }
  37. }
  38.  
  39. memo[s] = result;
  40. return result;
  41. }
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement