We would dfs on the search tree and find all the patterns, we would also write a check method to check if the string is palindrome or not, if it is we would add it to the subset.
class Solution {
public:
bool check(int l, int r, string &s){
while(l < r){
if(s[l++] != s[r--])return false;
}
return true;
}
void dfs(vector<vector<string>> &res, string & s, int idx, vector<string> &curRes, int len){
if(len == s.length()){
res.push_back(curRes);
return;
}
for(int i = 1; idx + i - 1 < s.length(); i++){
if(check(idx, idx + i - 1, s)){
string cur = s.substr(idx, i);
curRes.push_back(cur);
dfs(res, s, idx + i, curRes, len + i);
curRes.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> curRes;
dfs(res, s, 0, curRes, 0);
return res;
}
};