// 三重for循环超时了,思路大概是对的
class Solution {
public int minCut(String s) {
int len = s.length();
int[][] dp = new int[len + 1][len + 1];
for (int i = len; i > 0; i--) {
for (int j = i; j <= len; j++) {
if (i == j) {
} else {
if (s.charAt(i - 1) == s.charAt(j - 1)) {
if (i == j - 1) {
} else {
if (dp[i + 1][j - 1] == 0) {
// 整体回文
} else {
// 不整体回文
getDp(i, j, dp);
}
}
} else {
// 不相等
getDp(i, j, dp);
}
}
}
}
return dp[1][len];
}
private void getDp(int i, int j, int[][] dp) {
int min = Integer.MAX_VALUE;
for (int k = i; k < j; k++) {
int tmp = dp[i][k] + dp[k + 1][j] + 1;
min = min > tmp ? tmp : min;
}
dp[i][j] = min;
}
}
解决方法:
三重转二重,多次计算
先记录dp回文情况,再进行一次dp计算
执行两次dp操作