//跟131一样预处理,f[i] = min(f[j]) + 1 且j + 1到i为回文串
class Solution {
public int minCut(String s) {
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 + 1 == j){
dp[i][j] = s.charAt(i) == s.charAt(j);
}else{
dp[i][j] = (s.charAt(i) == s.charAt(j)) && dp[i + 1][j - 1];
}
}
}
int[] f = new int[len];
Arrays.fill(f, Integer.MAX_VALUE);
for(int i = 0; i < len; i++){
if(dp[0][i])
f[i] = 0;
else{
for(int j = 0; j < i; j++){
if(dp[j + 1][i]){
f[i] = Math.min(f[i], f[j] + 1);
}
}
}
}
return f[len - 1];
}
}
LeetCode 132. 分割回文串 II
最新推荐文章于 2022-09-21 10:19:43 发布