https://leetcode-cn.com/problems/palindrome-partitioning/
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
package factory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @Description: 分割回文串
* https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/275/string/1137/
* @Author: Jaryn
* @Date: 2019/12/4 15:00
*/
public class Partition {
static List<List<String>> result = new ArrayList<>();
public static void main(String[] args) {
partition("cbbbcc");
for (int i =0; i<result.size(); i++) {
List<String> list = result.get(i);
for(int j=0; j< list.size(); j++) {
System.out.print(list.get(j) + " ");
}
System.out.println("");
}
}
public static List<List<String>> partition(String s) {
result = new ArrayList<>();
next(s, new ArrayList<>());
return result;
}
/**
* 递归需要缩小范围,所以递归的参数是每次截取的后半段A,for循环表示每次截取A的位数。
* @param s 每次截取的后半段字符串
* @param list 一次结果的list
*/
public static void dfs(String s, ArrayList<String> list) {
if(s.length() == 0) {
result.add(new ArrayList<>(list));
return;
}
for(int i=1; i<=s.length(); i++) {
String sub = s.substring(0,i);
if(isPaNum(sub)) {
list.add(sub);
dfs(s.substring(i, s.length()), list);
list.remove(list.size() - 1);
}
}
}
/**
*
* @param s
* @return
*/
public static boolean isPaNum(String s) {
char[] chars = s.toCharArray();
for(int i=0; i<chars.length; i++) {
if(chars[i] != chars[chars.length - 1 -i]) {
return false;
}
}
return true;
}
}