问题描述:
解答:
class Solution {
public int minCut(String s) {
int min=s.length();
List<List<String>> res=partition(s);
for(int i=0;i<res.size();i++){
min=Math.min(min,res.get(i).size());
}
return min-1;
}
public static List<List<String>> partition(String s) {
List<List<String>> res=new ArrayList<>();
List<String> list=new ArrayList<>();
util(s,0,res,list);
return res;
}
public static void util(String s,int start,List<List<String>> res,List<String> list){
if(start==s.length()){
res.add(new ArrayList<String>(list));
return;
}
for(int i=start;i<s.length();i++){
String substr=s.substring(start,i+1);//上一轮剩下的子串
if(isPalindrome(substr)) {
list.add(substr);
util(s, i + 1, res, list);
list.remove(list.size() - 1);
}
}
}
public static boolean isPalindrome(String s){
if(s.length()==1){
return true;
}
for(int i=0,j=s.length()-1;i<j;i++,j--){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
}
return true;
}
}
结果:
只能再想想了。