题目
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
思路
递归回溯
实现
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> temp;
func(res, 0, s, temp);
return res;
}
bool ifPalin(int start, int end, string s) {
if (start > end) {
return false;
}
int i = start;
int j = end;
while (i < j) {
if (s[i] == s[j]) {
i++;
j--;
} else {
return false;
}
}
return true;
}
void func(vector<vector<string>>& res, int current, string s, vector<string>& temp) {
if (current == s.size()) {
res.push_back(temp);
return;
}
for (int i = current; i < s.size(); i++) {
if (ifPalin(current, i, s)) {
temp.push_back(s.substr(current, i - current + 1));
func(res, i + 1, s, temp);
temp.pop_back();
}
}
}
};