思路:动态规划
用 131、分割回文串 的回溯思路会超时
131 是要记录每一种分割情况,本题只记录最小分割次数,动态规划即可。dp2[i]
记录[0,i]
里的最小次数
class Solution {
public int minCut(String s) {
int len=s.length();
boolean[][] dp=new boolean[len][len];
isVaild(dp,s);
int[]dp2=new int[len];
for(int r=1;r<len;r++){
if(dp[0][r]==false){
dp2[r]=dp2[r-1]+1;//最坏情况,当前字符单独为一段
for(int l=0;l<r;l++){
if(dp[l][r]) dp2[r]=Math.min(dp2[r],dp2[l-1]+1);
}
}
}
return dp2[len-1];
}
public void isVaild(boolean[][]dp,String s){
int len=s.length();
for(int i=0;i<len;i++){
for(int j=0;j<=i;j++){
if(s.charAt(i)==s.charAt(j)){
if(i-j<3) dp[j][i]=true;
else dp[j][i]=dp[j+1][i-1];
}
}
}
}
}