给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
思路: 回溯法。只是记得Java的字符串分割函数s.substring(0,i)左闭右开区间。所以 for (int i = 1;i <= s.length();i++) { i<=s.length才是
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> list = new ArrayList<>();
if (s == null || s.length() == 0)
return list;
dfs(list,s,new ArrayList<String>());
return list;
}
public void dfs(List<List<String>> list,String s,ArrayList<String> tmp) {
if (s == null || s.length() == 0)
{
list.add(new ArrayList<String>(tmp));
return;
}
for (int i = 1;i < s.length();i++) {
if (isHui(s.substring(0,i))) {
tmp.add(s.substring(0,i));
dfs(list,s.substring(i,s.length()),tmp);
tmp.remove(tmp.size()-1);
}
}
}
public boolean isHui(String s) {
int i = 0;
int r = s.length()-1;
while (i < r) {
if (s.charAt(i)!=s.charAt(r))return false;
i++;
r--;
}
return true;
}
}