LeetCode 132. 分割回文串 II

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回符合要求的最少分割次数。

示例:

输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

class Solution {
public:
    int minCut(string s) {
        int n=s.size();
        if(!n)return 0;
        vector<vector<bool>>c(n,vector<bool>(n,false));
        for(int i=1;i<=n;i++){
            for(int j=0;j<n-i+1;j++){
                int l=j,r=j+i-1;
                c[l][r]=s[l]==s[r]&&(l+1>r-1||c[l+1][r-1]);
            }
        }
        vector<int>f(n+1);
        f[0]=0;
        for(int i=1;i<=n;i++){
            f[i]=INT_MAX;
            for(int j=1;j<=i;j++){
                if(c[j-1][i-1])
                    f[i]=min(f[i],f[j-1]+1);
            }
        }
        return f[n]-1;
    }
};

 

posted @ 2019-07-20 17:00  YF-1994  阅读(119)  评论(0编辑  收藏  举报