Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
给定一个字符串,让我们把字符串分割成回文子串,并把所有可能的情况输出。我们采用回溯法,在for循环中递归搜索,如果当然搜索的子串是回文字符串,就把它加入到list中。代码如下:
public class Solution { public List<List<String>> partition(String s) { List<List<String>> result = new ArrayList<List<String>>(); LinkedList<String> list = new LinkedList<String>(); if(s == null) return result; getPartition(0, s, list, result); return result; } public void getPartition(int start, String s, LinkedList<String> list, List<List<String>> result) { if(start == s.length()) { result.add(new LinkedList<String>(list)); } for(int i = start; i < s.length(); i++) { if(isPalindrome(s.substring(start, i + 1))) { list.add(s.substring(start, i + 1)); getPartition(i + 1, s, list, result); list.removeLast(); } } } public boolean isPalindrome(String s) { int l = 0; int r = s.length() - 1; while(l < r) { if(s.charAt(l) != s.charAt(r)) return false; l ++; r --; } return true; } }