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.
思路:dp+boolean数组判断回文字符串,代码:
public int minCut(String s) { char[] res=s.toCharArray(); int[] cut=new int[s.length()+1]; boolean[][] ispalin=new boolean[s.length()][s.length()]; int len=s.length(); for(int i=0;i<cut.length;i++) cut[i]=len-i; for(int i=len-1;i>=0;i--){ for(int j=i;j<len;j++){ if(res[i]==res[j]&&(j-i<2||ispalin[i+1][j-1])){ ispalin[i][j]=true; cut[i]=Math.min(cut[j+1]+1,cut[i]); } } } return cut[0]-1; }状态转移方程,cut[i]=min(cut[i],cut[j+1]+1) 即当ij为回文字符串时,寻找当前最优的切割方式。