其他分享
首页 > 其他分享> > 132. 分割回文串 II

132. 分割回文串 II

作者:互联网

 

难度困难

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

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

 

示例 1:

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

示例 2:

输入:s = "a"
输出:0

示例 3:

输入:s = "ab"
输出:1
 
class Solution {
public:
    int min_res = INT_MAX;
    int minCut(string s) {
        int n = s.size();
        vector<vector<bool>> dp =  vector<vector<bool>>(n,vector<bool>(n,false));
        for(int i = 0 ; i < n;i++) {
            dp[i][i] = true;
        }
        for(int end = 0; end < n ;end++) {
            for(int  start = end -1; start >=0;start--) {
                if (s[start]==s[end]) {
                    if (end-start<=1) {
                        dp[start][end] = true;
                    } else {
                        dp[start][end] = dp[start+1][end-1];
                    }
                }
            }
        }
        //  计算最小切割次数 dp
        vector<int> dp2 =  vector<int>(n,INT_MAX);
        for(int end = 0; end < n ;end++) {
            if (dp[0][end]) dp2[end] = 0;
            for(int  start = 0; start < end;start++) {
                if (dp[start+1][end]) {
                    dp2[end] = min(dp2[end],1 + dp2[start]);
                }
            }
        }
        return  dp2[n-1];
       
    }

};

 

标签:end,dp2,start,int,++,II,132,dp,回文
来源: https://www.cnblogs.com/zle1992/p/16525791.html