public int minCut(String s) {
int len = s.length();
boolean[][] dp = new boolean[len][len];
int cuts[] = new int[len+1];
for (int i = 0; i < len; ++i){
cuts[i] = len - i; //cut nums from i to len [i,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))
|| (s.charAt(i) == s.charAt(j) && dp[i+1][j-1])){
dp[i][j] = true;
cuts[i] = Math.min(cuts[i], cuts[j+1]+1);
}
}
}
return cuts[0]-1;
}
Refer: http://www.cnblogs.com/springfor/p/3891896.html