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
  • 相关阅读:
    群辉:服务器错误 错误代码38
    wireshark filter manualpage
    收集下shell使用笔记
    Android kernel LOGO的更换方法
    java实现截屏
    [转]android4.0.3 修改启动动画和开机声音
    博客搬迁
    idea 2017.3创建springboot项目报无效的源发行版: 1.8或者Unsupported major.minor version 52.0的解决方案
    关于mybatis查询集合返回为[null]的问题
    关于mybatis中resultType返回null的问题
  • 原文地址:https://www.cnblogs.com/big-zoo/p/13587794.html
Copyright © 2011-2022 走看看