给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
题目来自leetcode
static List<List<String>> listList = new ArrayList<>();
public static void main(String[] args) {
String s = "aab";
List<List<String>> lists = partition(s);
System.out.println(lists);
}
public static List<List<String>> partition(String s) {
nextWords(s, 0, new ArrayList<>());
return listList;
}
private static void nextWords(String s, int index, List<String> list){
if(index == s.length()){
//所有的结果集
listList.add(new ArrayList<>(list));
return;
}
for(int i = index; i < s.length(); i++){
//获得一个一个的回文子串
String subStr = s.substring(index, i + 1);
if(isPalindrome(subStr)){
list.add(subStr);
nextWords(s, i + 1, list);
//删除结果集最后一个 然后返回上一层
list.remove(list.size() - 1);
}
}
}
private static boolean isPalindrome(String s){
for(int i = 0; i <= s.length() / 2; i++){
if(s.charAt(i) != s.charAt(s.length() - 1 - i)){
return false;
}
}
return true;
}