1、题目描述
输入字符串s,将其划分为几部分,每个部分都是回文串。返回所有这样的可能。
2、思路
Backtracking。
从0开始划分,直到第i个字符,子字符串0到i是回文的,则从i+1再开始划分。直到字符串的所有字符用尽。
3、代码
vector<vector<string>> partition(string s) {
vector<vector<string>> ans;
vector<string> v;
dfs(ans,v,s,0);
return ans;
}
void dfs( vector<vector<string>>& ans,vector<string>& v,string s, int id){
if(id==s.size()){
ans.push_back(v);
return;
}
string str;
for(int i = id;i<s.size();i++){
str+=s[i];
if(ok(str)){
v.push_back(str);
dfs(ans,v,s,i+1);
v.pop_back();
}
}
}
bool ok(string s){
for(int i=0,j=s.size()-1;i<j;i++,j--){
if(s[i]!=s[j]) return false;
}
return true;
}