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超时
public class Solution {
public int minCut(String s) {
if(s==null || s.length()<=1) return 0;
if(isPalindrome(s,0,s.length()-1)) return 0;
return cutTimes(s,0,0);
}
//dfs
public int cutTimes(String s,int start,int times){
if(start==s.length()){
return times-1;
}
if(isPalindrome(s,start,s.length()-1)) return times;
int res=s.length()-1;
for(int i=start;i<s.length();i++){
if( isPalindrome(s,start,i)){
if(isPalindrome(s,i,s.length()-1)){
res=Math.min(res,times+1);
break;
}
else res=Math.min(res,cutTimes(s,i+1,times+1));
}
}
return res;
}
public boolean isPalindrome(String s,int i,int j){
while(i<=j){
if(s.charAt(i)==s.charAt(j)){
i++;
j--;
}
else return false;
}
return true;
}
}
dp