此题是在帮我们学习几种思维概念:
1. 将单个字符串用二维数组表示matrix,matrix[i][j]代表,从字符i到字符j的一个子串,0<=i<=j<字符长度。
2. matrix[i][j]这个子串是否是回文,由字符i是否等于字符j和matrix[i+1][j-1]是否为回文决定
3.对于matrix[i][j]这个子串,如果是回文,下刀在i-1处,于是得到,j处的下刀个数,寻回往复得到j处的最小下刀数。
4.对于整个字符串,下刀数在length-1处保存。
public class Solution {
public int minCut(String s) {int length = s.length();
boolean [][]isPalindrome = new boolean[length][length];
int[] cut = new int[length];
for (int j = 0; j < length; j++) {
cut[j] = j;
for (int i = 0; i <= j; i++) {
if (s.charAt(i) == s.charAt(j) && (j - i <= 1 || isPalindrome[i + 1][j - 1])) {
isPalindrome[i][j] = true;
if (i > 0) {
cut[j] = Math.min(cut[j], cut[i - 1] + 1);
} else {
cut[j] = 0;
}
}
}
}
return cut[length - 1];
}
}