CC19 分割回文串-ii
/**
* dp[i]即S的前i个字符的最小分割数
* dp[i] = Math.min(dp[i],dp[j]+1),其中 j < i
* 初始状态:dp[i] = i-1;
* @param s
* @return
*/
public int minCut(String s) {
int size = s.length();
if (size == 0) {
return 0;
}
int[] dp = new int[size + 1];
for (int i = 0; i < size + 1; i++) {
dp[i] = i - 1;//初始化,dp[0] = -1保证不需要分割的时候为0.
}
for (int i = 1; i < dp.length; i++) {
for (int j = 0; j < i; j++) {
if (isPal(s, j, i-1)) {//字符串与数组一个单位偏移量
dp[i] = Math.min(dp[i], dp[j] + 1);
}
}
}
return dp[size];
}
/**
* 判断是否是回文字符串
* @param s
* @param start
* @param end
* @return
*/
private boolean isPal(String s, int start, int end) {
while (start < end) {
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}