1 """
2 Given a string s, partition s such that every substring of the partition is a palindrome.
3 Return all possible palindrome partitioning of s.
4 Example:
5 Input: "aab"
6 Output:
7 [
8 ["aa","b"],
9 ["a","a","b"]
10 ]
11 """
12 """
13 两个解法 ,一递归二迭代 都很难理解
14 """
15 class Solution1:
16 def partition(self, s):
17 if not s:
18 return [[]]
19 path = []
20 res = []
21 self.dfs(s, path, res)
22 return res
23
24 def dfs(self, s, path, res):
25 if not s:
26 res.append(path)
27 for i in range(1, len(s) + 1): # 不理解,很难写
28 pre = s[:i]
29 if pre == pre[::-1]:
30 self.dfs(s[i:], path + [pre], res)
31
32
33 class Solution2:
34 def partition(self, s):
35 """
36 :type s: str
37 :rtype: List[List[str]]
38 """
39 if not s:
40 return []
41 res = [[]]
42 for i, x in enumerate(s):
43 tmp = []
44 for r in res:
45 tmp.append(r + [x])
46 if len(r) >= 1 and r[-1] == x:
47 tmp.append(r[:-1] + [r[-1] + x])
48
49 if len(r) >= 2 and r[-2] == x:
50 tmp.append(r[:-2] + [r[-2] + r[-1] + x])
51
52 res = tmp
53 return res
54 if __name__ == '__main__':
55 s = "aab"
56 ans = Solution2()
57 print(ans.partition(s))