leetcode学习笔记:动态规划-判断回文切割最小次数

    int minCut(string s) {
        int len=s.size();
        vector<int>res(len,0);
        vector<vector<bool> >pd(len,vector<bool>(len,false));
        for(int i=0;i<len;++i)
        {
            res[i]=i;
            for(int j=i;j>=0;--j)
            {
                if(s[j]==s[i]&&(i-j<=1||pd[i-1][j+1]))
                {
                    pd[i][j]=true;
                    if(!j)
                        res[i]=min(res[i],0);
                    else
                        res[i]=min(res[i],res[j-1]+1);
                }
            }
        }
        return res[len-1];
    }
中心思想是,从字符串的每个字符开始往回遍历,当发现与此次起始字符相同的字符时,判断两个字符中间的字符串是否为回文(通过二维数组),如果是,则包含这两个字符的中间一整个字符串都是回文,切割次数则为与此次起始字符相同的字符前一个字符所对应的最小切割次数+1.若已经扫描至第一个字符,则切割次数为0,即到当前遍历至的字符的整个字符串都是回文。

猜你喜欢

转载自blog.csdn.net/weixin_40736096/article/details/80383834