LeetCode5 最长回文子串
给你一个字符串 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 最长回文子串相关推荐
- LeetCode5. 最长回文子串
LeetCode5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: " ...
- leetcode5. 最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- leetcode5:最长回文子串
这个题目主要是运用manacher算法,又称为马拉车算法,下面对算法进行介绍. manacher算法 首先,定义一些变量,假设当前访问的是第ii个位置: 1.p[i]:1.p[i]:表示以第i ...
- LeetCode--5.最长回文子串(滑动窗口)
最长回文子串(C) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 根据题目,需要注意的有以下几点: 回文子串 回文子串就是正着读和反着读是一样的,比如a ...
- python最长回文子串leetcode_Python版LeetCode5. 最长回文子串
本文转载自[微信公众号:机器学习算法与Python精研,ID:AITop100]经微信公众号授权转载,如需转载与原文作者联系 题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的 ...
- leetcode--5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- Leetcode--5. 最长回文子串(java)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- 马拉车java_leetcode-5 最长回文子串-画蛇添足的马拉车算法
leetcode-5 最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: &q ...
- 怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)
leetcode 5 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: " ...
- LeetCode5-最长回文子串原理及Python实现
LeetCode5(medium)-最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 思路 中心扩展法 遍历字符串,依次把每个字符作为中心. ...
最新文章
- 在普通PC上安装XENSERVER 6.2
- VS2008中文正式版发布了,附下载链接!
- 怎么把ide改成ahci_如何将硬盘由IDE模式修改为AHCI模式,我的主板是华硕P8Z68-VLX,请高手帮帮忙。...
- python编程培训多少钱-想要学习Python,武汉Python编程培训费用是多少?
- 【数理知识】Riccati 黎卡提 system
- 5.3.1计算机网络传输层之TCP可靠传输
- Android开发之设置Edittext小数点后两位以及限制位数同时使用
- JAVA每个初学者都应该搞懂的问题 还可以比较基础
- 由内省引出JavaBean的讲解
- 【Level 08】U08 Positive Attitude L3 What a life
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
- 算法:有效九宫格数独Valid Sudoku
- comsol5.6下载
- 虚拟机一直光标闪,进不去,解决方法之一。
- 定义char dog[]=wang\0miao;那么sizeof(dog)与strlen(dog)分别是多少:
- STM32F1与STM32CubeIDE编程实例-光断续传感器驱动
- WPF之触发器Triggers
- 前端页面偶尔不渲染,错误:Uncaught SyntaxError: Unexpected token < 解决方法
- 行业研究分析-全球与中国Type-C数据线市场现状及未来发展趋势
- 8张图,看懂数据驱动业务的六个层次