Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. class Solution {
  2. public:
  3. vector<vector<string>> partition(string s) {
  4. int len = s.size();
  5. vector<vector<bool>> isPalin(len, vector<bool>(len, false));
  6. for(int i = 0; i < len; ++i)
  7. {
  8. for(int j = 0; j <= i; ++j)
  9. {
  10. if(s[i] == s[j] && (i - j < 2 || isPalin[j + 1][i - 1]))
  11. isPalin[j][i] = true;
  12. }
  13. }
  14. vector<vector<string>> res;
  15. vector<string> curr;
  16. backtrack(res, curr, isPalin, s, 0);
  17. return res;
  18. }
  19.  
  20. private:
  21. void backtrack(vector<vector<string>>& res, vector<string>& curr, const vector<vector<bool>>& isPalin, const string s, int start)
  22. {
  23. if(start >= s.size())
  24. {
  25. res.push_back(curr);
  26. return;
  27. }
  28. for(int i = start; i < s.size(); ++i)
  29. {
  30. if(isPalin[start][i])
  31. {
  32. curr.push_back(s.substr(start, i - start + 1));
  33. backtrack(res, curr, isPalin, s, i + 1);
  34. curr.pop_back();
  35. }
  36. }
  37. }
  38. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement