LeetCode 5. 最长回文子串

本文为打卡刷Leetcode题系列文章, 这个系列文章的目录都是按照如下四个部分构成

  • 题目链接
  • 题目描述
  • 代码初步
    这部分写的是我在刷题过程中的思路,相信在拿到题目就立马参考大神们的思路写代码是不会有进步的,我思故我在,思考让我进步!!
  • 代码欣赏
    这一部分po出优秀的解题答案,这里我们可以学习大神们的解题思路,进而内化成自己的。

题目链接

https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/

题目描述

在这里插入图片描述

代码初步

说说自己的思路,因为回文串是中心对称的,所以可以采用中心对称向两边扩散的方法。

具体算法步骤如下:

首先寻找中心点,这个中心点又分为两种情况:
第一:字符串个数为奇数的时候,中心点只有一个,但是这个中心点可能是N位字符串中的任意一个
第二:字符串个数为偶数的时候,中心点有两个,假设字符串位数为N,那么中心点有N-1种情况

循环遍历中心点,分别计较中心点为1个的时候和中心点为2个的时候的回文串长度,取max

最后,不断更新最长的回文字符串长度

时间复杂度为O(n^2)

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if s is None or len(s) < 1:
            return ''
        # n个中心或者n+1个中心
        start, end = 0,0
        for i in range(0, len(s)):
            len1 = self.expandCenter(s, i, i)
            len2 = self.expandCenter(s, i, i+1)
            length = max(len1, len2)
            if length> (end - start):
                start = i - (length - 1)//2
                end = i + length//2
        return s[start:end+1]
        

    def expandCenter(self, s: str, l: int, r: int):
        while (l>=0 and r< len(s) and (s[l]== s[r])):
            l -= 1
            r += 1
        return r - l - 1

在这里插入图片描述

代码欣赏

该题的动态规划解法正在努力研究中。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值