๐๐๐ 132. ๅๅฒๅๆไธฒ II
2022ๅนด10ๆ10ๆฅ
- algorithm
๐๐๐ 132. ๅๅฒๅๆไธฒ II
้พๅบฆ: ๐๐๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public int minCut(String s) {
// ๆ่ทฏ๏ผ
// ๅ
dp[i][j]
int len = s.length();
if(len == 1) {
return 0;
}
boolean[][] dp = new boolean[len][len];
for(int i = len - 1; i >= 0; i --) {
for(int j = i; j < len; j ++) {
if(i == j) {
dp[i][j] = true;
} else if(i == j - 1) {
if(s.charAt(i) == s.charAt(j)) {
dp[i][j] = true;
}
} else {
if(s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
dp[i][j] = true;
}
}
}
}
if(dp[0][len - 1]) {
return 0; // ๆดไธชๅฐฑๆฏๅญ็ฌฆไธฒ๏ผ็ดๆฅ่ฟๅ
}
int[] array = new int[len]; // ไปฅ [i] ไธบ็ปๅฐพ็ๅๆไธฒๆๅฐๅๅฒๆฌกๆฐ [0, i]
for(int i = 0; i < len; i ++) {
if(dp[0][i]) {
array[i] = 0;
} else {
// [0, i] ้ๅๆไธฒ๏ผ้ๅไธญ้ดๅๅฒ็น
int min = i;
for(int j = 1; j <= i; j ++) {
// j ๅ้ขๅๅฒ๏ผ[0, j - 1] & [j, i]
if(dp[j][i]) {
min = Math.min(min, array[j - 1] + 1);
}
}
array[i] = min;
}
}
return array[len - 1];
}
}