import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串二维数组 */ public static ArrayList<ArrayList<String>> arrayList = new ArrayList<>(); public static ArrayList<String> stringArrayList = new ArrayList<>(); public boolean isPalindrome (String s) { // write code here StringBuilder stringBuffer1 = new StringBuilder(); stringBuffer1.append(s); return stringBuffer1.toString().equals(stringBuffer1.reverse().toString()); } public String[][] partition (String s) { // write code here char[] chars = s.toCharArray(); search(0, chars, new StringBuffer()); String[][] strings = new String[arrayList.size()][]; for (int i = 0; i < strings.length; i++) { strings[i] = new String[arrayList.get(i).size()]; for (int j = 0; j < arrayList.get(i).size(); j++) { strings[i][j] = arrayList.get(i).get(j); } } return strings; } public void search(int cur, char[] chars, StringBuffer stringBuffer) { if (cur == chars.length) { int length = 0; for (int i = 0; i < stringArrayList.size(); i++) { length += stringArrayList.get(i).length(); } if (length == chars.length) { arrayList.add(new ArrayList<>(stringArrayList)); } return; } stringBuffer.append(chars[cur]); if (isPalindrome(stringBuffer.toString())) { stringArrayList.add(stringBuffer.toString()); search(cur + 1, chars, new StringBuffer()); stringArrayList.remove(stringArrayList.size() - 1); } search(cur + 1, chars, stringBuffer); stringBuffer.deleteCharAt(stringBuffer.length() - 1); } }
本题主要考察N叉树的建立,所用编程语言是java。
本题相比前面全排列数多了一个判断条件,每个组合中的字符串都需要是回文串,所以我们需要编写一个函数判断是否是回文串,然后按照全排列数的组合那题做法进行解题就行