题目描述
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。
思路
从 s 的头部开始暴力穷举,如果发现 s[0…i] 是一个回文子串,那么我们就可以把 s 切分为 s[0…i] 和 s[i+1…], 然后我们去尝试把 s[i+1…] 去暴力切分成多个回文子串即可。
代码如下
public class SplitPalindromeString {
List<List<String>> res = new ArrayList<>();
LinkedList<String> list = new LinkedList<>();
public List<List<String>> partition(String s) {
dfs(s, 0);
return res;
}
public void dfs(String s, int start){
if(start == s.length()){
res.add(new ArrayList<>(list));
return;
}
for(int i = start;i < s.length();i++){
if(isValid(s, start, i)){
list.add(s.substring(start, i + 1));
}else{
continue;
}
dfs(s, i + 1);
list.removeLast();
}
}
public boolean isValid(String s, int start, int end){
while(start < end && s.charAt(start) == s.charAt(end)){
start++;
end--;
}
return start >= end;
}
}