易小侠 2022-02-01 13:12 采纳率: 93.9%
浏览 90
已结题

用python解决最长回文子串问题

最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:

输入:s = "cbbd"
输出:"bb"
示例 3:

输入:s = "a"
输出:"a"
示例 4:

输入:s = "ac"
输出:"a"

  • 写回答

1条回答 默认 最新

  • Code_流苏 C/C++领域优质创作者 2022-02-01 14:56
    关注

    可以借助Manacher's Algorithm(马拉车算法)进行求解
    这个算法是以每一个字符为中心, 向两边发散,同时,用一个数组p来记录以每一个字符为中心的回文串的一半的长度.
    具体的可网上检索进行了解
    代码如下:

    class Solution:
        def longestPalindrome(self, s):
            def get_length(string, index):
                # 借助循环求出index为中心的最长回文字串
                start, length = index // 2, 0
               #获取字符串长度,并赋值非r_
                r_ = len(string)
                for i in range(1, index + 1):
                    if index + i < r_ and string[index - i] == string[index + i]:
                        start = (index - i) // 2
                        length += 1
                    else:
                        break
                return start, length
    
            s_list = [c for c in s]
    
            # 形成新串
            new_s = '#' + '#'.join(s_list) + '#'        
    
            #初始化赋值
            max_start = max_length = 0
            length = len(new_s)
            for index in range(0, length):
                start, r_length = get_length(new_s, index)
                if max_length < r_length:            #如果max_length小于r_length 则将start、r_length分别赋值给max_start、max_length
                    max_start, max_length = start, r_length
            return s[max_start: max_start+max_length]
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同