1.Description
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"] ]
https://leetcode.com/problems/palindrome-partitioning/#/description
解读
输入:一个字符串,把该字符串分割,使得每个字符串都构成回文,输出所有满足条件的分割结果
求解该问题,可以采取回溯和循环的策略。
如果输入“aab”,循环判断[0:1],[0:2],[0:3] (左开右闭),对于其中的每一个采取深度优先搜索(DFS)
https://leetcode.com/problems/palindrome-partitioning/#/solutions
如上图,对于[0:1]—>分割成[a]+[a][a][b]/[a][ab]
对于[0:2]—>分割成[aa]+[b]
对于[0:3]—>分割成[aab]
2.Solution
class Solution(object):
def partition(self, s):
return [[s[:i]] + rest
for i in range(1, len(s) + 1)
if s[:i] == s[i - 1::-1]
for rest in self.partition(s[i:])] or [[]]
https://leetcode.com/problems/palindrome-partitioning/#/solutions
if s[:i] == s[i - 1::-1],s[i-1::-1]是s[:i]的逆序,判断是否为回文
上述代码可以修改为:
class Solution(object):
def mypartition(self, s):
ans = []
for i in range(1, len(s) + 1):
if s[:i] == s[i - 1::-1]:
for rest in self.partition(s[i:]):
ans.append([s[:i]] + rest)
print(ans)
if not ans:
return [[]]
return ans