class Solution {
public:
vector<vector<string>> ans;
vector<vector<string>> partition(string s) {
int n=s.size();
vector<vector<bool>> dp(n,vector<bool>(n,true));
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++){
dp[i][j]=(s[i]==s[j]) && dp[i+1][j-1];
}
}
function<void(vector<string> , int, int)> dfs=[&](vector<string> v,int x,int y ){
if(y==n-1){
if(dp[x][y]){
v.push_back(s.substr(x,y-x+1));
ans.push_back(v);
}
}else{
if(dp[x][y]){
vector<string> new_v=v;
new_v.push_back(s.substr(x,y-x+1));
dfs(new_v,y+1,y+1);
dfs(v,x,y+1);
}else{
dfs(v,x,y+1);
}
}
};
vector<string> res;
dfs(res,0,0);
return ans;
}
};
131力扣:分割回文串
最新推荐文章于 2024-08-02 23:05:10 发布