给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1:
1 2
| 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
|
示例 2:
提示:
1 <= s.length <= 16
s
仅由小写英文字母组成

用下标left和right来控制子字符串的遍历
如果[left,right)是回文串,继续递归[right,right+1];
如果[left,right)不是回文串,遍历[left,right+1)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution {
List<List<String>> ans = new ArrayList<>(); List<String> path = new ArrayList<>();
public List<List<String>> partition(String s) { traversal(s,0); return ans; }
public void traversal(String s, int left){ if(left == s.length()){ ans.add(new ArrayList<>(path)); return; } for(int i = left; i < s.length(); i++){ String str = s.substring(left, i+1); if(!isPalindromicStr(str)){ continue; } path.add(str); traversal(s, i); path.remove(path.size()-1); } }
public boolean isPalindromicStr(String s){ int len = s.length(); for(int i = 0; i < len/2; i++){ if(s.charAt(i)== s.charAt(len-1-i)){ continue; }else{ return false; } } return true; } }
|