标签:执行 描述 判断 n+1 pre 思路 system 最优 回文串
给定一个字符串,输出把它全部切成回文子串的最小分割数。
例:str="ACDCDCDAD",输出2。
DP
int cutTime=dp[j+1]+1;//
句的顺利执行,且dp[len-1]=0,palStr=true.dp数组多开一位,并初始化其为-1。遍历j从i到len-1,若j到len-1是回文串,则dp[i]=dp[j+1]+1是候选最优解之一。故有dp[i]=min{dp[j+1]+1},i<=j<=len-1且palStr[i+1][j-1]是回文串
。
str[i]==str[j]&&(j-i<=1||palStr[i+1][j-1])
public class Main {
public static void main(String args[]) {
String str="acdcdcdad";
int time=cutTimes(str);
System.out.println(time);
}
public static int cutTimes(String str) {
if(str==null||str=="") {
return 0;
}
int len=str.length();
int[] dp=new int[len+1];//
dp[len]=-1;//
boolean[][] palStr=new boolean[len][len];
for(int i=0;i<len;++i) {
for(int j=0;j<len;++j) {
palStr[i][j]=false;
}
}
for(int i=len-1;i>=0;--i) {
dp[i]=Integer.MAX_VALUE;
for(int j=i;j<len;++j) {
// for(int j=len-1;j>=i;--j) {
if(str.charAt(i)==str.charAt(j)&&(j-i<=1||palStr[i+1][j-1])) {
palStr[i][j]=true;
int cutTime=dp[j+1]+1;//
if(cutTime<dp[i]) {
dp[i]=cutTime;
}
}
}
}
return dp[0];
}
}
标签:执行 描述 判断 n+1 pre 思路 system 最优 回文串
原文地址:https://www.cnblogs.com/coding-gaga/p/10859323.html