- 设切割点为i,i从1到len(s)+1,则s的左半边为s[:i],右半边位s[i:]
- 当左半边为回文串时,对右半边进行递归求解切割得到的回文串集合,然后合并左半边和右半边切割得到的所有可能的回文串集合;当左半边不是回文串时,不做操作,切割点后移,相当于剪枝
- 设置递归的终止条件,空字符串、单字符串或遍历完所有切割点时返回
class Solution(object):
def partition(self, s):
"""
:type s: str
:rtype: List[List[str]]
"""
#判断是否为回文串
def ispalindrome(s):
if s == s[::-1]:
return True
else:
return False
res = []
if s == '':
return [[]]
if len(s) == 1:
return [[s]]
for i in range(1,len(s)+1):
lefts = s[:i]
rights = s[i:]
if ispalindrome(lefts):
rightres = self.partition(rights)
for x in rightres:
res.append([lefts]+x)
return res
参考:https://blog.csdn.net/ggdhs/article/details/91347578