首页 > 其他 > 详细

[leedcode 132] Palindrome Partitioning II

时间:2015-07-26 15:25:54      阅读:218      评论:0      收藏:0      [点我收藏+]

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.

public class Solution {
  /*  dp[i][j]保存s(i,j)是否是回文,因为dp[i][j]=dp[i+1][j-1]&&s.charAt(i)==s.charAt(j)(j-i>=2时),即求dp[i][j]需要借助dp[i+1][j-1]求出,所以求dp时,需要从下往上,并且从左向右。
    求出dp之后,需要构造一个res数组,res[i]保存从0到i需要剪切的最少个数。如果dp[0][i]是回文,res[i]=0,如果不是回文,此时已知res[0~i-1]已经求出,因此需要借助res[j](0<=j<i)求res[i]*/
    public int minCut(String s) {
        if(s==null||s.length()<1) return 0;
        int len=s.length();
        int res[]=new int[len];
        boolean dp[][]=new boolean[len][len];
        for(int i=len-1;i>=0;i--){
            for(int j=i;j<len;j++){
                if(s.charAt(i)==s.charAt(j)&&(j-i<2||dp[i+1][j-1])){
                    dp[i][j]=true;
                }
            }
        }
        for(int i=0;i<len;i++){
            int ms=len;
            if(dp[0][i]){
                res[i]=0;
            }else{
                
                for(int j=0;j<i;j++){
                    if(dp[j+1][i]&&ms>res[j]+1)
                            ms=res[j]+1;
                }
                res[i]=ms;
            }
        }
        return res[len-1];
    }
}

 

[leedcode 132] Palindrome Partitioning II

原文:http://www.cnblogs.com/qiaomu/p/4677682.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!