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:
void partition(vector<vector<string> >&result, vector<vector<bool> >&matrix,
vector<string>& tmp,string s,int begin){
if(begin==s.size()){
result.push_back(tmp);
return;
}
for(int i=begin;i<s.size();i++){
if(matrix[begin][i]){
string t(s.begin()+begin,s.begin()+i+1);
tmp.push_back(t);
partition(result,matrix,tmp,s,i+1);
tmp.pop_back();
}
}
}
vector<vector<string> > partition(string s) {
vector<vector<string> > result;
if(s.empty()||s.size()==0){
return result;
}
vector<vector<bool> > matrix(s.size(),vector<bool>(s.size(),true));
//记录s[i...j]是否为回文
for(int i=s.size()-2;i>=0;i--){
for(int j=i+1;j<s.size();j++){
if(s[i]==s[j]){
matrix[i][j]=matrix[i+1][j-1];
}else{
matrix[i][j]=false;
}
}
}
vector<string> tmp;
partition(result,matrix,tmp,s,0);
return result;
}
};