LeetCode: Palindrome Partitioning

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.


像这种求所有可能性的问题就不适合用DP做,比较适合dfs。

思路就是从头扫描,按顺序将palindrome放入结果中。

需要注意的是,这里判断是否为palindrome的方法是,将string反转,然后比较和原来的是否相同。

 1 public static ArrayList<ArrayList<String>> partition(String s) {
 2         ArrayList<String> tmp = new ArrayList<String>();
 3         ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
 4         partition(s, 0, tmp, result);
 5         return result;
 6     }
 7     public static void partition(String s, int position, ArrayList<String> tmp, ArrayList<ArrayList<String>> result) {
 8         if (position == s.length()) {
 9             result.add(new ArrayList<String>(tmp));
10             return;
11         }
12         else {
13             for (int i=position; i<s.length(); i++) {
14                 String w = s.substring(position, i+1);
15                 if (isPalindrome(w)) {
16                     tmp.add(w);
17                     partition(s, i+1, tmp, result);
18                     tmp.remove(tmp.size()-1);
19                 }
20             }
21         }
22     }
23     public static boolean isPalindrome(String a) {
24         StringBuilder x = new StringBuilder(a).reverse();
25         return x.toString().equals(a);
26     }

 

 

posted on 2014-02-03 13:17  longhorn  阅读(165)  评论(0编辑  收藏  举报

导航