• 5. 最长回文子串


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

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring
    思路:manacher算法模板题

    manacher算法是对朴素的回文串搜索的优化,只需要O(n)的时间复杂度就可以计算最长回文串。

    代码:

    class Solution:
        def longestPalindrome(self, s: str) -> str:
            if s=="":
                return ""
            index=[0,1]
            mid=1
            r=1
            a=['#']
            for i in s:
                a.append(i)
                a.append('#')
            l=len(a)
            ll=0
            for i in range(2,l):
                if i<mid+r:
                    ll=min(index[2*mid-i],mid+r-i)
                else:
                    ll=0
                if i+ll>=mid+r:
                    j=1
                    while i+ll+j<l and i-ll-j>=0 and a[i+ll+j]==a[i-ll-j]:
                        j+=1
                    ll=ll+j-1
                    if i+ll>mid+r:
                        mid=i
                        r=ll
                index.append(ll)
            ans=""
            num=max(index)
            mnum=0
            for i in range(len(index)):
                if index[i]==num:
                    mnum=i
                    break
            start=0
            if num%2==0:
                start=int((mnum)/2-num/2)
            else:
                start=int((mnum+1)/2-(num-1)/2)-1
            for i in range(start,start+num):
                ans+=s[i]
            return ans
  • 相关阅读:
    python、Java、大数据和Android的薪资如何?
    php最新版本配置mysqli
    使用Python3爬虫抓取网页来下载小说
    pygame事件之——控制物体(飞机)的移动
    用javascript做别踩白块游戏2
    用javascript做别踩白块游戏1
    select、poll、epoll之间的区别总结(IO同、异步、(非)阻塞)----内核态、用户态
    元类
    python大神-javascript知识
    python大神-html知识
  • 原文地址:https://www.cnblogs.com/big-zoo/p/13587794.html
Copyright © 2020-2023  润新知