class Solution {
vector<vector<string>>res;
vector<string>ans;
vector<vector<int>>dp;
int n;
public:
void dfs(string &s,int i)
{
if(i==n)
{
res.push_back(ans);
return;
}
for(int j=i;j<n;j++)
{
if(ishw(s,i,j)==1)
{
ans.push_back(s.substr(i,j-i+1));
dfs(s,j+1);//搜索回文串之后的元素
ans.pop_back();//回溯
}
}
}
int ishw(string &s,int i,int j)
{
if(dp[i][j]) return dp[i][j];
if(i>=j) return dp[i][j]=1;
return dp[i][j]=(s[i]==s[j]?ishw(s,i+1,j-1):-1);
}
vector<vector<string>> partition(string s)
{
n=s.size();
dp.resize(n,vector<int>(n,0));
dfs(s,0);
return res;
}
};
动态规划判断回文
for(int i=n:0)
for j=i+1:n
dp[i][j]=(s[i]==s[j])&&dp[i-1][j+1];
end
end