Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
Return
[
["aa","b"],
["a","a","b"]
]
DFS,时间分析,一个有n-1的地方可以断开,所以有断和不断两种情况,所有情况就是2^n。
public class Solution { //Time: O(2^n) public ArrayList<ArrayList<String>> partition(String s) { ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>(); ArrayList<String> tmp = new ArrayList<String>(); help(res, tmp, s, 0); return res; } private void help(ArrayList<ArrayList<String>> res, ArrayList<String> tmp, String s, int index) { if (index == s.length()) { res.add(new ArrayList<String>(tmp)); return; } for (int i = index + 1; i <= s.length(); i++) { String cur = s.substring(index, i); if (valid(cur)) { tmp.add(cur); help(res, tmp, s, i); tmp.remove(tmp.size() - 1); } } } private boolean valid(String s) { int left = 0; int right = s.length() - 1; while (left < right) { if (s.charAt(left) != s.charAt(right)) { return false; } left++; right--; } return true; } }
No comments:
Post a Comment