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。
本题相比前面全排列数多了一个判断条件,每个组合中的字符串都需要是回文串,所以我们需要编写一个函数判断是否是回文串,然后按照全排列数的组合那题做法进行解题就行

京公网安备 11010502036488号