最长回文串之中心扩散法
最长回文串之中心扩散法
题目描述
leetcode5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:输入: "cbbd"
输出: "bb"
算法思想
比如回文串:“aba”、 “aa”,我们可以观察到它两边是互为镜像的,那我们就可以从回文字符串的中心字符开始向两边扩散,获取到以此位置为中心的字符串长度。
但奇数串和偶数串的中心位置是不一样的,如"aba"中心位置是1,而"aa"是处于两字符之间。
Python3的大致代码如下:
class Solution:def longestPalindrome(self, s: str) -> str:# 如果字符串是“”,“a“,之类的直接返回即可if len(s) < 2:return s# 定义最长字符串的初始左右边界 left = 0right = 0# 从第一个字符开始以它为中心向两边扩散for i in range(0, len(s)):# 奇数情况下的回文长度len1 = self.expandAroundCenter(s, i, i)# 偶数情况下的回文长度len2 = self.expandAroundCenter(s, i, i + 1)# 取最大回文长度len3 = max(len1, len2)# 更新左右边界值if len3 > right - left:left = i - int((len3 - 1) / 2)right = i + int(len3 / 2)print(left, right+1)return s[left:right+1]def expandAroundCenter(self, s: str, left: int, right: int) -> int:# 返回当前字符向两边扩散的回文串长度l = leftr = rightwhile l >= 0 and r < len(s) and s[l] == s[r]:l = l - 1r = r + 1return r - l - 1if __name__ == "__main__":s = Solution()assert s.longestPalindrome("babad") == "bab" or s.longestPalindrome("babad") == "aba"assert s.longestPalindrome("cbb") == "bb"param = "kyyrjtdplseovzwjkykrjwhxquwxsfsorjiumvxjhjmgeueafubtonhlerrgsgohfosqssmizcuqryqomsipovhhodpfyudtusjhonlqabhxfahfcjqxyckycstcqwxvicwkjeuboerkmjshfgiglceycmycadpnvoeaurqatesivajoqdilynbcihnidbizwkuaoegmytopzdmvvoewvhebqzskseeubnretjgnmyjwwgcooytfojeuzcuyhsznbcaiqpwcyusyyywqmmvqzvvceylnuwcbxybhqpvjumzomnabrjgcfaabqmiotlfojnyuolostmtacbwmwlqdfkbfikusuqtupdwdrjwqmuudbcvtpieiwteqbeyfyqejglmxofdjksqmzeugwvuniaxdrunyunnqpbnfbgqemvamaxuhjbyzqmhalrprhnindrkbopwbwsjeqrmyqipnqvjqzpjalqyfvaavyhytetllzupxjwozdfpmjhjlrnitnjgapzrakcqahaqetwllaaiadalmxgvpawqpgecojxfvcgxsbrldktufdrogkogbltcezflyctklpqrjymqzyzmtlssnavzcquytcskcnjzzrytsvawkavzboncxlhqfiofuohehaygxidxsofhmhzygklliovnwqbwwiiyarxtoihvjkdrzqsnmhdtdlpckuayhtfyirnhkrhbrwkdymjrjklonyggqnxhfvtkqxoicakzsxmgczpwhpkzcntkcwhkdkxvfnjbvjjoumczjyvdgkfukfuldolqnauvoyhoheoqvpwoisniv"assert s.longestPalindrome(param) == "qahaq"
最长回文串之中心扩散法相关推荐
- P4445 最长回文串
P4445 最长回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbcaacbcaacbca是回文串,而abcabcabc不是(abc的顺序为abcabcabc,逆序为cbacbacb ...
- 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- manacher算法----O(n)最长回文串
manacher算法----O(n)最长回文串 分类:字符串 (126) (0) 举报 收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...
- 最长回文串_LeetCode解析,第五题:最长回文子串
LeetCode第五题:最长回文子串 5: 英文题面: Given a string s, find the longest palindromic substring in s. You may a ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- 1616: 最长回文串(马拉车算法)
1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...
- 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...
- 最长回文串_第78天——第78题(最长回文串 )
今天又是阴天,不过阴天凉快,我喜欢. 第78天--第78题(最长回文串) 看题目! 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 ...
最新文章
- 关于chrome等浏览器不支持showModalDialog的解决方案
- Jmeter-获取响应结果中参数出现的次数
- QML资源加载和网络透明度
- datatable如何生成级联数据_如何把Excel表数据批量生成条形码
- 前端当前是否处在一个糟糕的时代?
- 瞎说一波3种基本背包问题【希望巨巨们指出错误】
- python自动化办公入门书籍-用python进行办公自动化都需要学习什么知识呢?
- python jupyter notebook 上传文件_使用jupyter notebook将文件保存为Markdown,HTML等文件格式...
- Remove Duplicates from Sorted List解题报告
- Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标...
- 一键AI着色,黑白老照片画面瞬间鲜活
- 安装 smartgit
- 什么是防抖和节流?区别是什么?
- 计算机视觉学习笔记(一)
- 几款主流快速开发平台比较
- 利用c语言中printf输出图形
- 云存储Java客户端上传文件
- 学会思考(转一位辩友的书单)
- npm install下载包的时候报4048rename的错误
- 直流稳压电源5V,GND,12V,-12V
热门文章
- Flex in a Week系列视频教程中文版发布
- ComponentArt.web.ui中文帮助之Grid(六)
- 异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
- 解决JS拖拽出现的问题
- Java定时任务解决方案
- 【报告分享】85后、95后宝妈人群洞察报告.pdf(附下载链接)
- 【报告分享】中科院-地球大数据支撑可持续发展目标报告.pdf
- js调用php会提前加载,为什么js代码里调用了php变量运行就明显变慢了
- 集成学习—Adaboost(理解与应用)