输出的是不同的分割方案
class Solution {
public:
vector<vector<bool>>flag;
vector<string>ans;
vector<vector<string>>nums;
void dfs(string &s,int i){
int n=s.size();
if(i==n){i表示s长度,等于即全部分割完毕
nums.push_back(ans);
return;
}
for(int j=i;j<n;j++){
if(flag[i][j]){
ans.push_back(s.substr(i,j-i+1));
dfs(s,j+1);
ans.pop_back(); }
} }
vector<vector<string>> partition(string s) {
int n=s.size(),i,j;
assign赋n个值为x的元素到vector容器中
flag.assign(n,vector<bool>(n,true));
只有一个字母默认为true初始化为一个 n x n 的二维布尔数组,其中所有元素都设置为 true,动态规划判断i到j是否为回文串
for(i=n-1;i>=0;i--)
从最后一个字符往前 abba a,ba,bb,bba,ab,abb,abba
for(j=i+1;j<n;j++){
if(s[i]==s[j]&&flag[i+1][j-1])
s[i]和s[j]相等,且去掉这两个字符后的子串s[i+1...j-1]也是回文串
flag[i][j]=true;
else
flag[i][j]=false;
}
dfs(s,0);
return nums; }};