解题思路
本来想错了想成i在左边耽误了一会时间,
据说要输出所有方式的题肯定涉及爆搜,就看你搜了个啥了
其实这个题你只需要枚举起始点(前缀)就可以
比如:“abababa”
a:爆搜bababa
aba:爆搜:baba
ababa:爆搜ba
…
前面那个求回文串的方法注意要与回文子序列
区分
代码
class Solution {
public:
vector<string> now_ans;
vector<vector<string> > ans;
bool f[200][200]={0};
void dfs(int begin,string s){
int l=s.length();
if(begin==l){
ans.push_back(now_ans);
return ;
}
for(int i=begin;i<l;i++){
if(f[begin][i]==true){
now_ans.push_back(s.substr(begin,i-begin+1));
dfs(i+1,s);
now_ans.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
f[0][0]=true;
int len=s.length();
for(int i=0;i<len;i++){//i在右边
for(int j=i;j>=0;j--){
if(i==j){
f[j][i]=true;
}
else if(i-j+1==2 && s[i]==s[j]){
f[j][i]=true;
}
else if(i-j+1>2 && f[j+1][i-1]==true && s[i]==s[j]){
f[j][i]=true;
}
}
}
// for(int i=0;i<len;i++){
// for(int j=0;i<len;j++){
// cout<<f[i][j]<<endl;
// }
// }
dfs(0,s);
return ans;
}
};