题目
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1:
输入:s = “aab”
输出:[[“a”,“a”,“b”],[“aa”,“b”]]
示例 2:
输入:s = “a”
输出:[[“a”]]
分析
判断子串是否为回文串,可以用String自带的SubString取子串,然后判断是否为回文串
public class 分割回文串 {
public static void main(String[] args) {
分割回文串 te = new 分割回文串();
te.partition("aab");
}
List<List<String>> resList = new ArrayList<List<String>>();
int len;
public List<List<String>> partition(String s) {
len = s.length();
dfs(s, 0, new ArrayList<>());
return resList;
}
public void dfs(String s, int index, List<String> list) {
if (index >= len) {
resList.add(new ArrayList<>(list));
return;
}
for (int i = index; i < len; i++) {
String temp = s.substring(index, i + 1);
if (isPa(temp)) {
list.add(temp);
dfs(s, i + 1, list);
list.remove(list.size() - 1);
}
}
}
// 判断回文串
public boolean isPa(String string) {
char[] cs = string.toCharArray();
for (int i = 0; i < cs.length / 2; i++) {
if (cs[i] != cs[cs.length - 1 - i]) {
return false;
}
}
return true;
}
}
总结
静下心来慢慢分析,抓住重点,将大的问题逐步分解成小的问题。
end.