问题描述:
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
示例:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
输入:s = "a"
输出:[["a"]]
解法思路:
- 采用回溯来解决
- startIndex表示切割的起始位置,for循环里面操作的不再是单个字符,而是一个字符串
- 切割出来的字符串,判断是否是回文,如果是,path则append
- 终止条件为startIndex大于len(s)
#回溯模板
path = []
result = []
def backtracking(s,startIndex):
nonlocal path,result
#确定终止条件
if (终止条件):
result.append(path[:])
return
#单层逻辑
for i in range(startIndex,len(s)):
pass
path.append()
backtracking(s,i+1)
path.pop() #回溯
return
代码如下:
class Solution:
def partition(self, s) :
path = []
result = []
def ishuiwen(s):#判断是否回文
return s[::-1] == s
def backtracking(s, startIndex):
nonlocal path, result
if startIndex >=len(s): # 起始的位置大于等于s长度 则返回
result.append(path[:])
return
for i in range(startIndex, len(s)): # 切割s的位置,不再是取s的值
trim_s = s[startIndex:i+1] # 每次操作的是一个字符串
if ishuiwen(trim_s): #如果是回文则append
path.append(trim_s)
backtracking(s, i + 1)
path.pop()
else: #否则 跳出本次循环
continue
backtracking(s, 0)
return result