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