class Solution {
bool isPalindrome(string &s,int i,int j){
while(i<j){
if(s[i]!=s[j])
return false;
++i,--j;
}
return true;
}
void DFS(string &s,int start,vector<int> &index,vector<vector<string>> &vec){
int len=s.length(),i,j,k;
if(start==len){
vector<string> v;
int l=index.size();
for(i=1;i<l;++i){
v.push_back(s.substr(index[i-1],index[i]-index[i-1]));
}
v.push_back(s.substr(index[l-1],len-index[l-1]));
vec.push_back(v);
return;
}
for(i=start;i<len;++i){
if(isPalindrome(s,start,i)){
index.push_back(start);
DFS(s,i+1,index,vec);
index.pop_back();
}
}
}
public:
vector<vector<string>> partition(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<string>> vec;
vector<int> index;
DFS(s,0,index,vec);
return vec;
}
};
Palindrome Partitioning
最新推荐文章于 2019-02-13 14:35:13 发布