题目描述:
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
代码思路:
- 初始化结果列表:
res = []
:用于存储所有可能的分割方案。每个方案都是一个列表,其中包含了多个回文子串。
- 定义递归函数
find
:find(x, tmp)
:这个函数用于递归地寻找从索引x
开始的所有可能的回文子串分割方案。- 参数
x
表示当前考虑的字符串s
的起始索引。 - 参数
tmp
是一个列表,用于存储当前已经找到的分割方案中的回文子串。
- 递归终止条件:
if x == len(s):
:如果x
等于字符串s
的长度,说明已经遍历完整个字符串,并且找到了一个有效的分割方案。此时,将tmp
(当前找到的分割方案)添加到结果列表res
中,并返回。
- 寻找回文子串:
- 循环
for i in range(x, len(s)):
:从当前索引x
开始,尝试所有可能的结束索引i
,以形成子串s[x:i+1]
。 a = s[x:i+1]
:获取从索引x
到i
的子串。if a == a[::-1]:
:检查子串a
是否是回文串。如果是,则进行下一步。
- 循环
- 递归调用:
find(i+1, tmp+[a])
:如果找到了一个回文子串a
,则将其添加到当前的分割方案tmp
中,并递归地调用find
函数,从索引i+1
开始继续寻找下一个回文子串。
- 返回结果:
- 在
partition
方法的最后,调用find(0, [])
开始从字符串的开头寻找所有可能的分割方案。 - 最终,返回结果列表
res
,其中包含了所有可能的分割方案。
- 在
代码实现:
class Solution:
def partition(self, s: str) -> List[List[str]]:
res = []
def find(x,tmp):
if x == len(s):
res.append(tmp)
return
for i in range(x,len(s)):
a = s[x:i+1]
if a==a[::-1]:
find(i+1,tmp+[a])
return
find(0,[])
return res