class Solution {
vector<vector<int>>dp;
vector<int>res;
public:
int minCut(string s) {
int n=s.size();
dp.resize(n,vector<int>(n,1));
for(int i=n-1;i>=0;i--)
{
for(int j=i+1;j<s.size();j++)
{
dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1]);
}
}
res.resize(n,INT_MAX);
for(int i=0;i<s.size();i++)
{
if(dp[0][i]) res[i]=0;
else
{
for(int j=0;j<i;j++)
{if(dp[j+1][i])
res[i]=min(res[i],res[j]+1);}
}
}
return res[n-1];
}
};
在昨天的基础上计算最小分割次数res[i]=MINres[j]+1;且当j+1 到i为回文串时。同时考虑0到i为回文串时,则分割次数为0 的情况。