6/20/2014

136. Palindrome Partitioning II

public class Solution {
    public int minCut(String s) {
        int len = s.length();
        int[] cut = new int[len+1];
        cut[len] = 0;
        boolean[][] table = createTable(s);
       
        for (int i=len-1; i>=0; i--) {
            cut[i] = len-i;
            for (int j=i; j<len; j++) {
                if (table[i][j]) cut[i] = Math.min(cut[i], cut[j+1]+1);
            }
        }
       
        return cut[0]-1;
    }
   
    public boolean[][] createTable(String s) {
        boolean[][] table = new boolean[s.length()][s.length()];
        for (int i=0; i<s.length(); i++) {
            table[i][i] = true;
        }
       
        for (int i=0; i<s.length(); i++) {
            int l = i-1;
            int r = i;
            while (l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)) {
                table[l--][r++] = true;
            }
           
            l = i-1;
            r = i+1;
            while (l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)) {
                table[l--][r++] = true;
            }
        }
       
        return table;
    }
}

没有评论:

发表评论