【second】Palindrome Partitioning II

 

    int minCut(string s) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(s.empty())
            return 0;
        int n = s.size();
        vector<vector<bool>>  bPalin(n,vector<bool>(n,false));
        int i,j;
        for(i=0;i<n;i++)
            bPalin[i][i] = true;
        for(i=0;i<n-1;i++)
            bPalin[i][i+1] = (s[i]==s[i+1]?true:false);
        
        for(i=n-3;i>=0;i--)
            for(j=i+2;j<n;j++)
                bPalin[i][j] = (bPalin[i+1][j-1]&&s[i]==s[j]?true:false);
        
        if(bPalin[0][n-1])
            return 0;
        
        vector<int> dp(n);
        dp[0] = 0;
        for(j=1;j<n;j++)
        {
            if(bPalin[0][j])
                dp[j] = 0;
            else
            {
                int mincut = j;
                for(i=1;i<=j;i++)
                {
                    if(bPalin[i][j])
                        mincut = min(mincut,dp[i-1]+1);
                }
                dp[j] = mincut;
            }
        }
        
        return dp[n-1];
        
    }

  

posted @ 2013-10-24 16:41  summer_zhou  阅读(126)  评论(0编辑  收藏  举报