最长回文子串_LeetCode(五)最长回文子串

793277807c166295e5fc9e1b02c328c6.png

LeetCode-00005,20201013


题目:最长回文子串

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

db9d03f8c5ba28b5a43bf871c12b8551.png

题目解析:回文?

ff0551cc9bd6c79d7b319b4ee485ccb9.png

百度百科说的这是人话?回文,就是顺序读取和逆序读取的结果是一样的。

当回文串长度为奇数时,比如“北京出租车租出京北”。

当回文串长度为偶数的时候,比如“1221”。

以上两种情况有一个共同的特点就是有一个中心,那在代码中如何表示中心呢?

解题:O(n)

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if s is None:
            return None
        length = len(s)
        if length <= 1 or s == s[::-1]:
            return s
        
        start = 0
        max_length = 1
        for i in range(1, length):
            if i - max_length >= 0:
                # 奇数情况,len(odd)=i+2
                ood = s[i-max_length-1 : i+1]
                # 偶数情况,len(even)=i+1
                even = s[i-max_length: i+1]
            if ood == ood[::-1] and i - max_length - 1 >= 0:
                start = i - max_length - 1
                max_length += 2
                continue
            if even == even[::-1] and i - max_length >= 0:
                start = i - max_length
                max_length += 1
                continue
        return s[start: start+max_length]

ebf30da6f3475bb470994a75db06177b.png

知识点:python输出list倒叙的三种方法

  • 切片

08989f09b9d444252460c84fed11cfaa.png
  • 列表的reverse方法对列表进行操作

4d37684bd1cb2e9ca5641cb89e7b340c.png

# x.reverse()改变了原有序列表x

  • reversed()函数没有改变了原有序列表,返回一个迭代器

3618213cb5bcef96e56c1614bff39314.png

继续加油~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值