编程集训 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
编程集训 day07 dynamic programming