题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/
题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
代码
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> ret;
if(s.empty())
return ret;
vector<string> path; // 当前回文串组合
int begin = 0;
int end = s.size() -1;
recursion(s,path, begin,end,ret);
return ret;
}
// 类似全排列问题 递归
void recursion(string s, vector<string> &path, int begin, int end, vector<vector<string>> &ret){
if(begin >= s.size()){
ret.push_back(path);
return;
}
for (int i = begin; i <= end; ++i) {
if(isPalindrome(s,begin,i)){
path.push_back(s.substr(begin, i-begin +1));
recursion(s, path, i+1, end, ret);
path.pop_back();
}
}
}
bool isPalindrome(string s, int begin, int end){
while(begin <= end){
if(s[begin] != s[end])
return false;
++begin, --end;
}
return true;
}
};