最长回文算法 python

题目

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

示例 1:

输入: “babad”

输出: “bab”

注意: “aba” 也是一个有效答案。

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if len(s)==0:
            return ""
        # '#'作为插入使用Manacher算法
        string_list = ['#']
        # string_list保存处理后的字符串
        for i in range(len(s)):
            string_list += [s[i],'#']
        len_list = []
        # len_list保存以当前点为中心点最大的回文长度
        for i in range(len(string_list)):
            j=0
            while j<=i and j+i < len(string_list) and string_list[i-j]==string_list[i+j]:
                j+=1
            len_list += [j]
            # 计算回文长度
        # 查找回文长度最大值所在位置
        sorted = []
        sorted += len_list
        sorted.sort(reverse = True)
        max =sorted[0]
        index = len_list.index(max)
        
        # 将带返回的最大回文保存至toreturn
        toreturn = [string_list[index]]
        for i in range(1,max,1):
            toreturn.insert(0,string_list[index-i])
            toreturn.append(string_list[index+i])
        # 去除'#'
        for i in range(toreturn.count('#')):
            toreturn.remove('#')
        # list转string
        str = "".join(toreturn)
        return str
        

Manacher算法

具体见该网址
https://blog.csdn.net/dyx404514/article/details/42061017

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值