题目
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
算法
class Solution {
List<List<String>> result = new ArrayList<>();
public List<List<String>> partition(String s) {
if(s.length()==0){
return result;
}
splitString(s,0,new ArrayList<>());
return result;
}
private void splitString(String s,int index,List<String> rList){
if(index==s.length()){
List<String> tmp = new ArrayList<>();
tmp.addAll(rList);
result.add(tmp);
}else {
for(int i = index;i<s.length();i++){
if(judge(s,index,i)){
rList.add(s.substring(index,i+1));
splitString(s,i+1,rList);
rList.remove(rList.size()-1);
}
}
}
}
private boolean judge(String s,int i,int j){
if(i==j){
return true;
}
while(i<j){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}
思路:
- 从左向右遍历,当前遍历的下标为index
- 同层遍历中,从index遍历到s的末尾,找到所有以index开头的回文串,找到了则进入下一层
- index到达s末尾时输出当前List