题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]
解题思路:
回溯 + 递归
代码:
class Solution {
public:
vector<vector<string>> res;
vector<string> temp;
bool isPartition(string s){
int i = 0, j = s.size() - 1;
while(i < j){
if(s[i] != s[j])
return false;
++i;
--j;
}
return true;
}
void dfs(string s, int a, int b){
//到字符串末尾了,将本次结果记录下来
if(a > b){
res.push_back(temp);
return;
}
//从index为a开始截取长度为1,2,3...的子串进行验证,成功则用剩下的部分递归。
for(int i = 1; i <= b - a + 1; ++i){
if(isPartition(s.substr(a, i))){
temp.push_back(s.substr(a, i));
dfs(s, a + i, b);
temp.pop_back();
}
}
return;
}
vector<vector<string>> partition(string s) {
dfs(s, 0, s.size() - 1);
return res;
}
};