字节 5. 最长回文子串

文章介绍了在Python中找到给定字符串的最长回文子串的两种方法:一种是使用二重遍历,另一种是通过动态规划。两种方法都检查字符串的每个可能子串是否为回文,并记录最长的回文子串。动态规划方法更注重空间效率,避免了全量存储子问题的答案。
摘要由CSDN通过智能技术生成

 题目描述

 方法:

1. 二重遍历

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        l = 0
        repeat = []
        if not s:
            return s
        for i in range(n):
            for j in range(n-1,i,-1):
                if s[i] == s[j]:
                    p,q = i, j
                    while s[p] == s[q] and p<q:
                        p+=1
                        q-=1
                    if (p == q or s[p]==s[q]) and j-i+1>l:
                        
                        l = j-i+1
                        repeat = s[i:j+1]

        return repeat if repeat else s[0]

2. 额外空间储存已经回文的序列,动态规划

class Solution:
    def longestPalindrome(self, s: str) -> str:

        if not s or len(s)<2:
            return s

        n = len(s)
        dp = [[0]*n for i in range(n)]
        ml = 0
        mr = 0
        mlen = 1
        for r in range(1,n):
            for l in range(0,r):
                if s[l] == s[r] and (r - l<=2 or dp[l+1][r-1]):
                    dp[l][r] = True
                    if r - l + 1 > mlen:
                        ml = l
                        mr = r
                        mlen = r - l + 1
        return s[ml:mr+1]

注意:

dp=[False*n]*n 写法会导致修改dp[i][j]时候把每一行都修改!

具体参考(23条消息) python中二维数组元素修改_修改python 二维数组_weixin_39345190的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值