一、描述

二、题解:

2.1 暴力法(O(N3)O(N^3)O(N3))

解释:

循环三次。第一次起始点循环;第二次终止点循环(从最右边开始到起始点为止);第三次起始点开始终止点结束,当两个值不相等时候跳出循环。只有完整进行第三次循环才满足回文串的条件。

class Solution:def longestPalindrome(self, s: str) -> str:max_ = 1max_str = s[0]length = len(s)for i in range(length):for j in range(length-1,i,-1):k_l = ik_r = jwhile(s[k_l] == s[k_r]):if (k_l >= k_r):breakelse:k_l+=1k_r-=1if k_l>=k_r and j - i +1 > max_:max_ = j - i +1max_str = s[i:j+1]breakif max_ == length:breakreturn max_str

2.2 动态规划(O(N2)O(N^2)O(N2))

解释:

首先初始化一个维度为length的二维单位阵(对角全为1,其余为0);判断是否有长度为2的回文串,如有则起始和终止索引在矩阵中对应的位置为1。
递归的思路为当起始点i到终止点j为回文串,则起始点i+1到终止点j-1也是回文串。因此从长度为3开始进行判断,当发现回文串时,修改矩阵对应位置值为1,并进行长度和起始位置的记录。

class Solution:def longestPalindrome(self, s: str) -> str:length= len(s)max_ = 1max_start = 0## initial matrixdst = [[0 for i in range(length)] for _ in range(length)]for i in reversed(range(length)):dst[i][i]=1if(i+1<length and s[i]==s[i+1]):dst[i][i+1]=1max_ = 2max_start=ifor le in range(3,length+1):for i in range(0,length-le+1): if(s[i]==s[i+le-1] and dst[i+1][i+le-2]==1):dst[i][i+le-1] = 1if le > max_:max_ = le max_start = ireturn s[max_start:max_start+max_]

2.3 中心扩展(O(N2)O(N^2)O(N2))

解释:

从中心向外扩展。
分为两种情况:第一种当回文串长度为奇数的情况;第二种当回文串长度为偶数的情况。
左右同时向外扩展,当左右不相同时停止扩展,记录最长回文串长度及起始位置。

class Solution:def longestPalindrome(self, s: str) -> str:max_ = 1max_start = 0length = len(s)for i in range(length): # oddfor k in range(2):k_l = i-k # 0 代表偶数,1代表奇数 k_r = i+1while(k_l>=0 and k_r<length and s[k_l]==s[k_r]):k_l -= 1k_r += 1if max_ < k_r - k_l-1:max_ = k_r - k_l-1max_start = k_l+1return s[max_start:max_start+max_]

2.4 Manacher(马拉车)算法(O(N)O(N)O(N))

解释:

利用历史记录及回文串的对称性,来达到跳着位移的目的。

class Solution:def longestPalindrome(self, s: str) -> str:s = list(s)new_s = '#' + '#'.join(s) + '#'length = len(new_s)P = [0]*lengthc = 0r = 0maxlen = 0max_start = 0for i in range(length):i_mirror = 2*c-iif (i<r):P[i] = min(r - i,P[i_mirror])k_l = i-(1+P[i])k_r = i+(1+P[i])while(k_l>=0 and k_r <length and new_s[k_l] == new_s[k_r]):P[i] += 1k_l -= 1k_r += 1if i+P[i] > r:c = ir = i+P[i]if P[i] > maxlen:maxlen = P[i]max_start = (i-P[i])//2return ''.join(s[max_start:max_start+maxlen])

如有问题或建议欢迎私信。
严禁私自转载,侵权必究

参考:
[1] 最长回文子串 [CSDN]

题解:最长回文子串(4种解法)相关推荐

  1. 最长回文子串-三种DP实现

    最长回文子串 https://leetcode-cn.com/problems/longest-palindromic-substring/ 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 ...

  2. leetcode题解5-最长回文子串

    问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同 ...

  3. 最长回文子串的不同解法

    给定一个字符串,返回该字符串的最长回文子串.回文也就是说 .正着读和反着读是一样的.以下总结了几种求回文的方式: 方法1 : 非常easy,枚举全部的区间 [i,j] ,查看该范围内是否是一个回文. ...

  4. 最长回文子串(多种解法,附马拉车算法)

    目录 •写在前面 •题目 •解法一  暴力破解 •解法二  暴力优化 •解法三  最长公共子串(动态规划整体) •解法四  中心扩展法 •解法五  马拉车算法 •结束 •写在前面 这种类型的题目算是比 ...

  5. jsp判断字符串相等_最长回文字符串三种解法

    先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...

  6. 牛客题霸 [ 最长回文子串] C++题解/答案

    牛客题霸 [ 最长回文子串] C++题解/答案 题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度. 给定字符串A以及它的长度n,请返回最长回文子串的长度. 题解: 两个方法: ...

  7. LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)

    Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Solution:de ...

  8. 怎么判断一个字符串的最长回文子串是否在头尾_【Leetcode每日打卡】最长回文串...

    干货预警:所有文章都会首发于我的公众号[甜姨的奇妙冒险],欢迎watch. 一.来历: 力扣从3月开始开启了每日一题打卡活动,于是跟风加入了打卡大军,这两天写评论.发题解,没想到反响还不错,收到了来自 ...

  9. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

最新文章

  1. 今天说的是必须要熟练掌握的归并排序
  2. pythonmsgbox怎么使用_如何使用tkinter的messagebox
  3. 2021年东城区各学校高考成绩查询,2020年东城区高三一模成绩及高中排名
  4. Git新建临时分支进行开发后合并至master
  5. 什么是SPDK,以及什么场景需要它
  6. Qt文档阅读笔记-TextEdit QML Type官方解析及实例
  7. 【leetcode_easy】538. Convert BST to Greater Tree
  8. 如何在终端启动Coda 2中隐藏的首选项?
  9. paip.ajax没有起作用,提示 no transport
  10. 人工智能生物学深度解析,附源代码
  11. 小米路由插件二维码2020_路由器如何禁止抖音、斗鱼、王者荣耀等app联网
  12. 【信息论】如何彻底理解信息和熵?
  13. 【czy系列赛】czy的后宫4 bzoj1925 [Sdoi2010]地精部落
  14. 微信小程序——VW、VH
  15. 使用微软官方工具下载安装Windows10系统
  16. 静态/动态博客Blog框架简介
  17. java gif转jpg_Java gif图片转换为jpg格式
  18. 三十四、Fluent液体喷雾蒸发模拟
  19. 可爱卡通儿童教育课件PPT模板
  20. win10虚拟机安装VMware Tools

热门文章

  1. 【ODOO OWL】基础 Owl 的 mount 挂载应用程序
  2. 【人工智能概论】 变分自编码器(Variational Auto Encoder , VAE)
  3. 概率论小课堂:伯努利实验(正确理解随机性,理解现实概率和理想概率的偏差)
  4. 解决“不是有效的win32应用程序”问题
  5. 火狐 附加组件 中无java_关于Win10系统上火狐浏览器附加组件找不到的解决方法...
  6. 手用计算机电池,MacBook 篇一:二手MacBook pro 2017上手+换电池体验
  7. window docker 安装 宝塔bt
  8. android4以下的音乐播放器,Android平台四大音乐播放器对比评测
  9. 高中信息技术:信息技术教学论
  10. vue开发中遇到的滚动到底部加载更多数据问题