Leetcode131:分割回文串

题目描述:

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

代码思路:

  1. 初始化结果列表
    • res = []:用于存储所有可能的分割方案。每个方案都是一个列表,其中包含了多个回文子串。
  2. 定义递归函数 find
    • find(x, tmp):这个函数用于递归地寻找从索引 x 开始的所有可能的回文子串分割方案。
    • 参数 x 表示当前考虑的字符串 s 的起始索引。
    • 参数 tmp 是一个列表,用于存储当前已经找到的分割方案中的回文子串。
  3. 递归终止条件
    • if x == len(s)::如果 x 等于字符串 s 的长度,说明已经遍历完整个字符串,并且找到了一个有效的分割方案。此时,将 tmp(当前找到的分割方案)添加到结果列表 res 中,并返回。
  4. 寻找回文子串
    • 循环 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 是否是回文串。如果是,则进行下一步。
  5. 递归调用
    • find(i+1, tmp+[a]):如果找到了一个回文子串 a,则将其添加到当前的分割方案 tmp 中,并递归地调用 find 函数,从索引 i+1 开始继续寻找下一个回文子串。
  6. 返回结果
    • 在 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值