zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    使用postman玩转接口测试
    使用virtualbox安装centos虚拟机,以及VirtualBox无法安装64位Linux CentOS的解决办法
    pytest学习笔记(三)
    【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)
    some tips
    python连mysql时避免出现乱码
    我回来啦_(:з」∠)_
    杂题记录
    日常记录。。。
    网络流
  • 原文地址:https://www.cnblogs.com/big-zoo/p/13587794.html
Copyright © 2011-2022 走看看