码迷,mamicode.com
首页 > 其他好文 > 详细

lintcode-medium-Palindrome Partition II

时间:2016-04-03 20:10:22      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

Given a string s, cut s into some substrings such that every substring is a palindrome.

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

 

Example

Given s = "aab",

Return 1 since the palindrome partitioning ["aa", "b"] could be produced using1 cut.

public class Solution {
    /**
     * @param s a string
     * @return an integer
     */
    public int minCut(String s) {
        // write your code here
        
        if(s == null || s.length() == 0)
            return 0;
        
        int len = s.length();
        boolean[][] isPalindrome = new boolean[len][len];
        
        for(int i = 0; i < len; i++){
            isPalindrome[i][i] = true;
        }
        
        for(int i = 0; i < len - 1; i++)
            isPalindrome[i][i + 1] = (s.charAt(i) == s.charAt(i + 1));
        
        for(int i = len - 1; i >= 0; i--){
            for(int j = i + 2; j < len; j++){
                if(s.charAt(i) == s.charAt(j) && isPalindrome[i + 1][j - 1])
                    isPalindrome[i][j] = true;
                else
                    isPalindrome[i][j] = false;
            }
        }
        
        if(isPalindrome[0][len - 1])
            return 0;
        
        int[] f = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            f[i] = i;
        }
        
        for (int i = 0; i < s.length(); i++) {
            if(isPalindrome[0][i])
                f[i] = 0;
            else    
                for (int j = 0; j < i; j++)
                    if(isPalindrome[j + 1][i])
                        f[i] = Math.min(f[i], f[j] + 1);
        }

        return f[len - 1];
    }
    
    public boolean valid(String s){
        int left = 0;
        int right = s.length() - 1;
        
        while(left < right){
            if(s.charAt(left) != s.charAt(right))
                return false;
            
            left++;
            right--;
        }
        
        return true;
    }
    
};

 

lintcode-medium-Palindrome Partition II

标签:

原文地址:http://www.cnblogs.com/goblinengineer/p/5350339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!