【leetcode100】分割回文串
1、题目描述
给你一个字符串 s
,请你将 s
分割成一些 子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
2、初始思路
2.1 思路
本题也是一道经典的回溯题,首先可以给出本题的树状图:
按照前文给出的回溯模板进行分析:
1、终止条件:当切割到词尾时,不能够再进行切割,此时结束;
if startIndex == len(s):
res.append(path.copy())
return
2、本文的关键是要将字符串分割为都为回文的子串,因此对子串的回文判断也很重要,可以使用反转进行判断:
if substr == substr[::-1]:
3、回溯的参数:首先,字符串s为一个参数;其次,判断切割位置的startIndex可作为另一个参数:
def backtracking(s,startIndex):
backtracking(s,i+1)
2.2 代码
根据上述分析,可以得到本题的完整代码:
class Solution:
def partition(self, s: str) -> List[List[str]]:
res = []
path = []
def backtracking(s,startIndex):
#切到字符串结尾结束
if startIndex == len(s):
res.append(path.copy())
return
for i in range(startIndex, len(s)):
substr = s[startIndex:i+1]
print("substr:",substr)
if substr == substr[::-1]:
path.append(substr)
print("path:",path)
backtracking(s,i+1)
path.pop()
backtracking(s,0)
return res