描述:
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
链接:https://leetcode-cn.com/problems/palindrome-partitioning
思路分析:
1、DFS
代码实现:
class Solution {
public static List<List<String>> ans = new ArrayList<>();
public static List<String> temp = new ArrayList<>();
public boolean check(String s, int start, int end) {
char[] c = s.toCharArray();
int i = start, j = end;
while (i < j) {
if (c[i] != c[j]) {
return false;
}
i++;
j--;
}
return true;
}
public void robot(int idx, String s) {
if (idx >= s.length()) {
List<String> res = new ArrayList<>(temp);
ans.add(res);
return;
}
for (int i = idx; i < s.length(); i++) {
if (check (s, idx, i)) {
temp.add(s.substring(idx, i + 1));
robot(i + 1, s);
temp.remove(temp.size() - 1);
}
}
}
public List<List<String>> partition(String s) {
ans.clear();
temp.clear();
robot(0, s);
return ans;
}
}