Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
Example:
Input: "aab"
Output:
[
["aa","b"],
["a","a","b"]
]
使用树的dfs top-down,扫边即可。维护一个path,进孩子前加我,离开孩子前删我。
关键是要找到进孩子的条件。 —— substring 是一个 回文串。
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> result = new ArrayList<>();
List<String> path = new ArrayList<>();
dfs(s, 0, result, path);
return result;
}
private void dfs(String s, int start, List<List<String>> result, List<String> path) {
if (start == s.length()) {
result.add(new ArrayList<>(path));
}
for (int i = start; i < s.length(); i++) {
String e = s.substring(start, i + 1);
if (isPal(e)) {
path.add(e);
dfs(s, i + 1, result, path);
path.remove(path.size() - 1);
}
}
}
private boolean isPal(String s) {
int start = 0;
int end = s.length() - 1;
while (start <= end) {
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}