版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zslngu/article/details/81664284
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s =”aab”,
Return
[
[“aa”,”b”],
[“a”,”a”,”b”]
]
class Solution {
public:
//判断是否为回文数
bool palindrome(char *p,int len){
char*q=p+len-1;
while(q>p){
if(*p==*q){
q--;
p++;
}else{
return false;
}
}
return true;
}
//深度优先搜索解空间
void dfs(char* p,string s,int i,int j,vector< vector<string> >&result,vector<string>temp){
// vector<string> temp;
// vector<string> temp;
//for(int k=j;k>=0;k--)
for(int l=i;l<=j;l++){
//如果i 至 l 是回文数
if(palindrome(p+i,l-i+1)){
temp.push_back(s.substr(i,l-i+1));
if(l==j){
result.push_back(temp);
}else{
dfs(p,s,l+1,j,result,temp);
}
temp.pop_back();
}
//如果此段不是回文数 循环继续;
}
}
vector<vector<string>> partition(string s) {
int len=s.length();
char *p=new char[len+1];
for(int i=0;i<len;i++)
p[i]=s[i];
p[len]='\0';
vector<string>temp;
vector< vector<string> > result;
dfs(p,s,0,len-1,result,temp);
return result;
}
};