132 Palindrome Partitioning II – Hard
Problem:
Thoughts:
Solutions:
public class Solution {
public int minCut(String s) {
if (s == null || s.length() <= 1) {
return 0;
}
boolean[][] isP = new boolean[s.length()][s.length()];
calIsP(isP, s);
int[] min = new int[s.length()];
min[0] = 0;
for (int i = 1; i < s.length(); i ++) {
if (isP[0][i] == true) {
min[i] = 0;
continue;
}
int minC = Integer.MAX_VALUE;
for (int j = 1; j <=i; j ++) {
if (isP[j][i] == true) {
minC = Math.min(minC, min[j-1] + 1);
}
}
min[i] = minC;
}
return min[s.length() -1];
}
private void calIsP(boolean[][] isP, String s) {
for (int i = 0; i < s.length(); i ++) {
isP[i][i] = true;
}
for (int i = 0; i < s.length() - 1; i ++) {
isP[i][i + 1] = s.charAt(i) == s.charAt(i + 1);
}
for (int k = 2; k < s.length(); k ++) {
for (int i = 0; i + k < s.length(); i ++) {
isP[i][i + k] = s.charAt(i) == s.charAt(i + k) && isP[i + 1][i + k - 1] == true;
}
}
}
}Last updated