题目原型:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could
be produced using 1 cut.
基本思路:
题目的意思就是在上一题的基础上找出切分次数最少的组合,即尽可能让回文字符串更长。那么我们同样生成table表用来存储i到j之间的字符串是否是回文;然后遍历字符串来更新最小的切分次数。
public int minCut(String s)
{
if(s==null||s.length()==0)
return 0;
//创建一个table表
boolean[][] table = new boolean[s.length()][s.length()];
int[] rs = new int[s.length()];
for(int i = 0;i<table.length;i++)
{
for(int j = 0;j<table.length;j++)
table[i][j] = true;
}
//产生table表
genTable(table,s);
if(table[0][table.length-1])
return 0;
for(int i = 1;i<s.length();i++)
{
if(table[0][i])
{
rs[i] = 0;
continue;
}
rs[i] = rs[i-1]+1;//不要s[i]参与
//要s[i]参与
for(int j = 0;j<i;j++)
{
if(table[j][i])
rs[i] = Math.min(rs[i],rs[j-1]+1);
}
}
return rs[rs.length-1];
}
//产生table表
public void genTable(boolean[][] table,String s)
{
//根据间距从小到大来遍历
for(int dis = 1;dis<table.length;dis++)
{
for(int i = 0,j = i+dis;j<table.length;i++,j++)
{
table[i][j] = (table[i+1][j-1]&&(s.charAt(i)==s.charAt(j)));
}
}
}
Palindrome Partitioning II,布布扣,bubuko.com
原文:http://blog.csdn.net/cow__sky/article/details/21736799