一、題目描述
給定一個字符串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [ ["aa","b"], ["a","a","b"] ] 二、解題思路
用回溯法,進行dfs,即可。
三、java代碼
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res = new ArrayList<>();
int n = s.length();
boolean[][] dp = new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (s.charAt(i) == s.charAt(j) && (i - j < 2 || dp[j + 1][i - 1])) dp[j][i] = true;
}
}
dfs(res, dp, 0, n, s, new ArrayList<String>());
return res;
}
private void dfs(List<List<String>> res, boolean[][] dp, int i, int n, String s, ArrayList<String> tmp) {
if (i == n) res.add(new ArrayList<>(tmp));
for (int j = i; j < n; j++) {
if (dp[i][j]) {
tmp.add(s.substring(i, j + 1));
dfs(res, dp, j + 1, n, s, tmp);
tmp.remove(tmp.size() - 1);
}
}
}
}