最长回文串之中心扩散法


题目描述

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"

最长回文串之中心扩散法相关推荐

  1. P4445 最长回文串

    P4445 最长回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbcaacbcaacbca是回文串,而abcabcabc不是(abc的顺序为abcabcabc,逆序为cbacbacb ...

  2. 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  3. java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  4. manacher算法----O(n)最长回文串

    manacher算法----O(n)最长回文串 分类:字符串 (126)  (0)  举报  收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...

  5. 最长回文串_LeetCode解析,第五题:最长回文子串

    LeetCode第五题:最长回文子串 5: 英文题面: Given a string s, find the longest palindromic substring in s. You may a ...

  6. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  7. 1616: 最长回文串(马拉车算法)

    1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...

  8. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)

    马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...

  9. 最长回文串_第78天——第78题(最长回文串 )

    今天又是阴天,不过阴天凉快,我喜欢. 第78天--第78题(最长回文串) 看题目! 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 ...

最新文章

  1. 关于chrome等浏览器不支持showModalDialog的解决方案
  2. Jmeter-获取响应结果中参数出现的次数
  3. QML资源加载和网络透明度
  4. datatable如何生成级联数据_如何把Excel表数据批量生成条形码
  5. 前端当前是否处在一个糟糕的时代?
  6. 瞎说一波3种基本背包问题【希望巨巨们指出错误】
  7. python自动化办公入门书籍-用python进行办公自动化都需要学习什么知识呢?
  8. python jupyter notebook 上传文件_使用jupyter notebook将文件保存为Markdown,HTML等文件格式...
  9. Remove Duplicates from Sorted List解题报告
  10. Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标...
  11. 一键AI着色,黑白老照片画面瞬间鲜活
  12. 安装 smartgit
  13. 什么是防抖和节流?区别是什么?
  14. 计算机视觉学习笔记(一)
  15. 几款主流快速开发平台比较
  16. 利用c语言中printf输出图形
  17. 云存储Java客户端上传文件
  18. 学会思考(转一位辩友的书单)
  19. npm install下载包的时候报4048rename的错误
  20. 直流稳压电源5V,GND,12V,-12V

热门文章

  1. Flex in a Week系列视频教程中文版发布
  2. ComponentArt.web.ui中文帮助之Grid(六)
  3. 异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介
  4. 《深入理解Java虚拟机》Java内存区域与内存溢出异常
  5. 解决JS拖拽出现的问题
  6. Java定时任务解决方案
  7. 【报告分享】85后、95后宝妈人群洞察报告.pdf(附下载链接)
  8. 【报告分享】中科院-地球大数据支撑可持续发展目标报告.pdf
  9. js调用php会提前加载,为什么js代码里调用了php变量运行就明显变慢了
  10. 集成学习—Adaboost(理解与应用)