输出的是不同的分割方案
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,abbafor(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;elseflag[i][j]=false;}dfs(s,0);return nums; }};