131. 分割回文串
题目:
给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
示例:
输入:s = “aab”
输出:[[“a”,“a”,“b”],[“aa”,“b”]]
解题思路:
这道题还是通过回溯的方法暴力枚举所有可能的分割情况。当分割起点=字符串s的长度时,就是收获结果的时候。
对于每层递归,我们去遍历所有可能的分割点,然后判断起始点到分割点的子串是否是回文串,如果是则可以将子串加入path并继续往下分割。
class Solution {private List<List<String>> result = new ArrayList<>();private List<String> path = new ArrayList<>();public List<List<String>> partition(String s) {backtrack(s, 0);return result;}private void backtrack(String s, int startIdx){if(startIdx == s.length()){result.add(new ArrayList<>(path));return;}for(int i = startIdx; i < s.length(); i++){if(isHuiWen(s, startIdx, i)){path.add(s.substring(startIdx, i + 1));backtrack(s, i + 1);path.removeLast();}}}private boolean isHuiWen(String s, int left, int right){while(left < right){if(s.charAt(left) != s.charAt(right)){return false;}left++;right--;}return true;}
}