编程集训 day07 dynamic programming
Palindrome Partitioning II
solution
class Solution {
public:
int minCut(string s) {
int len=s.size();
vector<vector<int>> flag(len,vector<int>(len));
for(int i=0;i<len;i++)
{
for(int k=0,j=i;j<len;j++,k++)
{
if((k==j)||((s[k]==s[j])&&(k==j-1||flag[k+1][j-1]))) flag[k][j]=1;
else flag[k][j]=0;
}
}
vector<int> cut(len,len);
for(int i=0;i<len;i++)
{
for(int j=0;j<=i;j++)
{
if(flag[j][i])
{
if(j==0)cut[i]=0;
else cut[i]=cut[i]>cut[j-1]+1?cut[j-1]+1:cut[i];
}
}
}
return cut[len-1];
}
};
result