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.
找出最少回文划分次数
DFS超时,DP来做
求所有回文子串时,dp[i][j]保存从i到j是否是回文子串 dp[i][j]=s.charAt(i)==s.charAt(j)&&dp[i+1][j-1];
count[i]表示从i到最后得最少划分次数count[i]=min(1+count[j+1])(dp[i][j]=true);
public class Solution {
public int minCut(String s) {
boolean[][] dp = new boolean[s.length()][s.length()];
int[] count = new int[s.length()];
for(int i=s.length()-1;i>=0;i--){
count[i]=s.length();
for(int j=i;j<s.length();j++){
if(s.charAt(i)==s.charAt(j)&&(j-i<2||dp[i+1][j-1])){
dp[i][j]=true;
if(j==s.length()-1)
count[i]=1;
else {
count[i]=Math.min(1+count[j+1],count[i]);
}
}
}
}
return count[0]-1;
}
}