Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- vector<vector<string>> partition(string s) {
- int len = s.size();
- vector<vector<bool>> isPalin(len, vector<bool>(len, false));
- for(int i = 0; i < len; ++i)
- {
- for(int j = 0; j <= i; ++j)
- {
- if(s[i] == s[j] && (i - j < 2 || isPalin[j + 1][i - 1]))
- isPalin[j][i] = true;
- }
- }
- vector<vector<string>> res;
- vector<string> curr;
- backtrack(res, curr, isPalin, s, 0);
- return res;
- }
- private:
- void backtrack(vector<vector<string>>& res, vector<string>& curr, const vector<vector<bool>>& isPalin, const string s, int start)
- {
- if(start >= s.size())
- {
- res.push_back(curr);
- return;
- }
- for(int i = start; i < s.size(); ++i)
- {
- if(isPalin[start][i])
- {
- curr.push_back(s.substr(start, i - start + 1));
- backtrack(res, curr, isPalin, s, i + 1);
- curr.pop_back();
- }
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement