Leetcode题5、最长回文字串(Python题解)

问题
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

示例 2:

输入: “cbbd”
输出: “bb”

题目来源:力扣(LeetCode)

leetcode5.最长回文子串

难度:中等

分析

这道题的官方解法非常好,很清晰。

官方题解

解决方法
1:暴力解法,遍历

class Solution():
    def longestPalindrome(self,s):
        #边界条件,主要是要判断字符串不能为空,否则下标会溢出
        if s == s[::-1]: return s #
        max_length = 1 #初始化,要更新的字串长度
        res = s[0] #初始字串
        for i in range(0,len(s)-1):#遍历数组,注意下标
            for j in range(i+1,len(s)): #遍历,注意下标
                #判断是否存在新子串更长,如果存在,则更新最长字串长和最长字串
                #使用了python的切片方式来判断字串是否相同,导致时间复杂度O(n^2)
                #如果不用切片,则是否为回文仍需要一次遍历来判断,复杂度为O(n^3)
                if j-i+1 > max_length and s[i:j+1]==s[i:j+1][::-1]:
                    max_length = j-i+1 #更新最长字串长
                    res = s[i:j+1] #更新最长字串
        return res

复杂度:O(n^3)

在这里插入图片描述

2:动态规划法
回文字符串天生具有状态转移的性质,一个字符串是否为回文永远依赖于其内层字符串是否为回文。
因此考虑动态规划解法,这一题动态规划的难度在于将状态建表。理解了将求解过程转变为求状态,和建表的方法,这一解法就很简单了。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值