返回s符合要求的的最少分割次數。
樣例
比如,給出字符串s = "aab",
返回 1, 因爲進行一次分割可以將字符串s分割成["aa","b"]這樣兩個迴文子串
import java.util.Scanner;
/**
* 給定一個字符串s,將s分割成一些子串,使每個子串都是迴文。
返回s符合要求的的最少分割次數。
樣例
比如,給出字符串s = "aab",
返回 1, 因爲進行一次分割可以將字符串s分割成["aa","b"]這樣兩個迴文子串
*
* @author Dell
*
*/
public class Test108 {
public static int minCut(String s)
{
if(s.equals("")||s==null)
return 0;
int len=s.length();
boolean[][] ishuiwen=new boolean[len][len];
for(int L=1;L<=len;L++)
{
for(int i=0;i<len-L+1;i++)
{
int j=i+L-1;
if(L==1)
{
ishuiwen[i][j]=true;
}
else if(L==2)
{
if(s.charAt(i)==s.charAt(j))
ishuiwen[i][j]=true;
}
else
{
if(s.charAt(i)==s.charAt(j)&&ishuiwen[i+1][j-1])
ishuiwen[i][j]=true;
}
}
}
int[] dp=new int[len];
for(int i=len-1;i>=0;i--)
{
if(ishuiwen[i][len-1])
{
dp[i]=0;
continue;
}
dp[i]=Integer.MAX_VALUE;
for(int j=i+1;j<len;j++)
{
if(ishuiwen[i][j-1]&&dp[i]>dp[j]+1)
{
dp[i]=dp[j]+1;
}
}
}
return dp[0];
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println(minCut(s));
}
}