力扣之最长回文子串——5

问题

在这里插入图片描述

解答

中心扩散法

算法
可以通过遍历字符串s,寻找每个中心的所对应的最长回文子串。
注意:
如果最长回文子串长度是偶数,则中心为两个最中央字符串中间的间隙。
如果最长回文子串长度是偶数,则中心为一个中央字符。
时间复杂度
O(N^2)

class Solution:
    def longestPalindrome(self, s: str) -> str:
        Length = len(s)
        if Length < 2:
            return s
        maxlen = 1
        ans = s[0]

        for i in range(Length):
            temp1, temp1l = self.center_spread(s, Length, i, i)
            temp2, temp2l = self.center_spread(s, Length, i, i + 1)
            if temp1l >= maxlen:
                tempmax = temp1  
            else:
                tempmax = temp2
            if len(tempmax) > maxlen:
                maxlen = len(tempmax)
                ans = tempmax

        return ans

    def center_spread(self, s, length, _left, _right):

        left = _left
        right = _right

        while left >= 0 and right < length and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left + 1:right], right - left - 1

调试结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值