给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
class Solution {
public:
vector<vector<string>> res;
bool check(string s,int left,int right){
while(left<right){
if(s[left]!=s[right]){
return false;
}
left++;right--;
}
return true;
}
void backtrack(string s,vector<string>&ans,int pos){
if(pos>=s.size()){
res.emplace_back(ans);
}
for(int i=pos;i<s.size();i++){
if(check(s,pos,i)){
ans.emplace_back(s.substr(pos,i-pos+1));
backtrack(s,ans,i+1);
ans.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
vector<string> ans;
backtrack(s,ans,0);
return res;
}
};
框架:
void backtrack(参数,解空间){
if(最终满足条件){
加入解;
}
for(剩下解空间){
if(满足条件){
先放入可能解中
查看剩下的解空间
从可能解取出
}
}
}