题意:将字符串划分为回文子串序列,求所有的划分方式。
分析:考虑将一个字符串划分为子串序列,共有2^(n-1)种不同划分(n为字符串长度),深搜,记录路径并判断每个子串是否为回文,复杂度为O(2^N)。
代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> ans;
vector<string> path;
dfs(ans,path,s,0);
return ans;
}
void dfs(vector<vector<string>> &ans,vector<string> &path,string s,int start){
if(start==s.size()){
ans.push_back(path);
return;
}
for(int i=start;i<s.size();++i){
if(isPalindrome(s,start,i)){
path.push_back(s.substr(start,1+i-start));
dfs(ans,path,s,i+1);
path.pop_back();
}
}
}
bool isPalindrome(string s,int start,int end){
for(int i=0;i<=(end-start)/2;++i){
if(s[start+i]!=s[end-i]){
return false;
}
}
return true;
}
};