import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return string字符串一维数组
     */
    public static Set<String> set = new TreeSet<>();
    public String[] partitionII (String s) {
        // write code here
        search(0, s, new StringBuffer());
        String[] strings = new String[set.size()];
        int index = 0;
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            strings[index] = iterator.next();
            index++; 
        }
        return strings;
    }

    public static void search(int index,String s,StringBuffer stringBuffer){
        if(index==s.length()){
            return;
        }
        if(!s.contains(stringBuffer.toString())){
            return;
        }
        stringBuffer.append(s.charAt(index));
        if(stringBuffer.length()>=2 && isParame(stringBuffer.toString()) && s.contains(stringBuffer.toString())){
            set.add(stringBuffer.toString());
        }
        search(index+1,s,stringBuffer);
        stringBuffer.deleteCharAt(stringBuffer.length()-1);
        search(index+1,s,stringBuffer);
    }

    public static boolean isParame(String s) {
        StringBuilder stringBuffer = new StringBuilder();
        stringBuffer.append(s);
        return stringBuffer.reverse().toString().equals(s);
    }
}

本题考察的知识点是递归,所用的编程语言是java。

递归的本质就是枚举,将所有的可能性都列举出来,然后判断满足条件的有哪些,本题也是一样,首先要求是回文串,而且是子串,然后再按照字符串字典序从小到大的顺序进行排列