131. 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.

For example, given s = "aab",
Return

  [
    ["aa","b"],
    ["a","a","b"]
  ] 

链接:  http://leetcode.com/problems/palindrome-partitioning/

5/17/2017

算法班

照着别人的答案改的。10ms, 49%

还是要判断这种DFS + backtracking的做法到底每一步哪里是起点。这个不要与子集搞混。

 1 public class Solution {
 2     public List<List<String>> partition(String s) {
 3         List<List<String>> ret = new ArrayList<>();
 4         if (s == null || s.equals("")) {
 5             return ret;
 6         }
 7         List<String> list = new ArrayList<String>();
 8         partitionString(ret, s, list, 0);
 9         return ret;
10     }
11 
12     private void partitionString(List<List<String>> ret, String s, List<String> list, int pos) {
13         if (s.length() == pos) {
14             ret.add(new ArrayList<String>(list));
15         }
16         for (int i = pos + 1; i <= s.length(); i++) {
17             String substring = s.substring(pos, i);
18             if (isPalindrome(substring)) {
19                 list.add(substring);
20                 partitionString(ret, s, list, i);
21                 list.remove(list.size() - 1);
22             }
23         }
24     }
25 
26     private boolean isPalindrome(String s) {
27         for (int i = 0, j = s.length() - 1; i <= j; i++, j--) {
28             if (s.charAt(i) != s.charAt(j)) return false;
29         }
30         return true;
31     }
32 }

别人的解释

https://discuss.leetcode.com/topic/6186/java-backtracking-solution

DP解法

https://discuss.leetcode.com/topic/2884/my-java-dp-only-solution-without-recursion-o-n-2

Python一行

https://discuss.leetcode.com/topic/19370/1-liner-python-ruby

我的解法是每次传同样的string但是起点不同,但是也可以传不同的string就不用多传一个参数

https://discuss.leetcode.com/topic/16800/concise-java-solution

更多讨论

https://discuss.leetcode.com/category/139/palindrome-partitioning

原文地址:https://www.cnblogs.com/panini/p/6871390.html