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

示例1

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

示例2

输入:s = “cbbd”
输出:“bb”

示例3

输入:s = “a”
输出:“a”

示例4

输入:s = “ac”
输出:“a”

分析

“回文串”是一个正读反读都一样的字符串。
1.首先对于长度为 111 的字符串, 它的最长回文子串为其本身; 空串没有回文子串.
2.由回文串性质可知, 当一个字符串 (length≥3)\text{length} \geq3)length≥3)为回文串时, 当它去掉首尾字符后, 中间部分同样为回文串.
3.采用动态规划方法, 那么可规定状态 state[i][j]=True\text{state}[i][j] = \text{True}state[i][j]=True ororor False\text{False}False , 来表示字符串 S[i…j]S [i\dots j]S[i…j] 是否为回文子串.
4.对于长度为 222 、长度为 333 的字符串, 我们只需要考虑字符串首尾是否相等. 若相等, 那它必是回文串.
5. 由 2.3.4. 可得出相应状态转移方程 (初始默认为 Flase\text{Flase}Flase):
state[i][j]={True,if (j−i+1)<4and string[i]= string[j]state[i+1][j−1],if (j−i+1)≥4and string[i]= string[j]Flase,if string[i]≠string[j]\text{state}[i][j] = \begin{cases} \text{True}, & \text{if $(j - i +1) < 4$ and string$[i]$ = string$[j]$} \\ \text{state}[i+1][j-1], & \text{if $(j - i +1) \geq 4$ and string$[i]$ = string$[j]$} \\ \text{Flase}, & \text{if string$[i]$ $\not=$ string$[j]$} \end{cases} state[i][j]=⎩⎪⎨⎪⎧​True,state[i+1][j−1],Flase,​if (j−i+1)<4 and string[i] = string[j]if (j−i+1)≥4 and string[i] = string[j]if string[i] ​= string[j]​
对于字符串 S=“babab"S=“babab"S=“babab", 它所对应的 state\text{state}state 表, 只考虑上三角部分

i/ji / ji/j 0 1 2 3 4
0 T F T F T
1 T F T F
2 T F T
3 T F
4 T

很显然, state[0][4]=True\text{state}[0][4] = \text{True}state[0][4]=True, 则串 S[0…4]S[0 \dots4]S[0…4] 为其最长回文子串.

code

class Solution:def longestPalindrome(self, s: str) -> str:n = len(s)if n < 2:return sbegin = 0maxLength = 1stateArray = [[False for _ in range(n)] for _ in range(n)]# stateArray = [[False]*5] * 5for i in range(n):stateArray[i][i] = Truefor j in range(1, n):for i in range(j):if not s[i] == s[j]:passelse:if j - i < 3:stateArray[i][j] = Trueelse:stateArray[i][j] = stateArray[i + 1][j - 1]if stateArray[i][j] and maxLength < j - i + 1:maxLength = j - i + 1begin = i# for i in range(len(stateArray)):#     print(stateArray[i])return s[begin:begin + maxLength]test = Solution()
print(test.longestPalindrome("babab"))

https://www.bilibili.com/video/BV1L54y1D7pa

LeetCode5 最长回文子串相关推荐

  1. LeetCode5. 最长回文子串

    LeetCode5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: " ...

  2. leetcode5. 最长回文子串(动态规划)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  3. leetcode5:最长回文子串

      这个题目主要是运用manacher算法,又称为马拉车算法,下面对算法进行介绍. manacher算法   首先,定义一些变量,假设当前访问的是第ii个位置: 1.p[i]:1.p[i]:表示以第i ...

  4. LeetCode--5.最长回文子串(滑动窗口)

    最长回文子串(C) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 根据题目,需要注意的有以下几点: 回文子串 回文子串就是正着读和反着读是一样的,比如a ...

  5. python最长回文子串leetcode_Python版LeetCode5. 最长回文子串

    本文转载自[微信公众号:机器学习算法与Python精研,ID:AITop100]经微信公众号授权转载,如需转载与原文作者联系 题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的 ...

  6. leetcode--5. 最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  7. Leetcode--5. 最长回文子串(java)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  8. 马拉车java_leetcode-5 最长回文子串-画蛇添足的马拉车算法

    leetcode-5 最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: &q ...

  9. 怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)

    leetcode 5 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: " ...

  10. LeetCode5-最长回文子串原理及Python实现

    LeetCode5(medium)-最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 思路 中心扩展法 遍历字符串,依次把每个字符作为中心. ...

最新文章

  1. 在普通PC上安装XENSERVER 6.2
  2. VS2008中文正式版发布了,附下载链接!
  3. 怎么把ide改成ahci_如何将硬盘由IDE模式修改为AHCI模式,我的主板是华硕P8Z68-VLX,请高手帮帮忙。...
  4. python编程培训多少钱-想要学习Python,武汉Python编程培训费用是多少?
  5. 【数理知识】Riccati 黎卡提 system
  6. 5.3.1计算机网络传输层之TCP可靠传输
  7. Android开发之设置Edittext小数点后两位以及限制位数同时使用
  8. JAVA每个初学者都应该搞懂的问题 还可以比较基础
  9. 由内省引出JavaBean的讲解
  10. 【Level 08】U08 Positive Attitude L3 What a life
  11. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
  12. 算法:有效九宫格数独Valid Sudoku
  13. comsol5.6下载
  14. 虚拟机一直光标闪,进不去,解决方法之一。
  15. 定义char dog[]=wang\0miao;那么sizeof(dog)与strlen(dog)分别是多少:
  16. STM32F1与STM32CubeIDE编程实例-光断续传感器驱动
  17. WPF之触发器Triggers
  18. 前端页面偶尔不渲染,错误:Uncaught SyntaxError: Unexpected token < 解决方法
  19. 行业研究分析-全球与中国Type-C数据线市场现状及未来发展趋势
  20. 8张图,看懂数据驱动业务的六个层次

热门文章

  1. List小心性能损失的方法
  2. 2月10日 感知器+浅层神经网络+反向传播+tensorflow
  3. 第三季-第26课-守护进程设计
  4. 距离向量算法与链路状态算法(RIP、OSPF)
  5. 凸优化第七章统计估计 7.5 实验设计
  6. Android TV 开发(2)
  7. 线性排序算法-堆排序 (2)
  8. IDC:第三季度企业WLAN市场增长强劲
  9. 【BZOJ 1491】 [NOI2007]社交网络
  10. 你应该首先保护哪些应用程序?这个问题本身问错了!