给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
思路:
回溯,判断每段是否是回文字符串
代码如下:
class Solution {
public:
vector<vector<string>> partition(string s) {
if(s.empty()) return {{}};
vector<vector<string>>res;
vector<string>path;
backtrack(s,0,path,res);
return res;
}
void backtrack(string s,int cur,vector<string>&path,vector<vector<string>>&res){
if(cur==s.size()){
res.push_back(path);
}
for(int end=cur+1;end<=s.size();end++){
string ss=s.substr(cur,end-cur);
if(!isPalindrome(ss)) continue;
path.push_back(ss);
backtrack(s,end,path,res);
path.pop_back();
}
}
bool isPalindrome(string& s){
int i=0;
int j=s.size()-1;
while(i<j){
if(s[i++]!=s[j--])
return false;
}
return true;
}
};