最长回文子串
题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
解题思路:
可以使用动态规划的方法
对任意字符串,如果头和尾相同,那么它的最长回文子串一定是去头去尾之后的部分的最长回文子串加上头和尾。如果头和尾不同,那么它的最长回文子串是去头的部分的最长回文子串和去尾的部分的最长回文子串的较长的那一个。这样理解之后就可以使用动态规划和递归的方法完成题目了。
Python源码:
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
maxl = 0
start = 0
for i in range(n):
# 如果已经有回文出现,并且又有新的回文加入
if i - maxl >= 1 and s[i-maxl-1: i+1] == s[i-maxl-1: i+1][::-1]:
start = i - maxl - 1
maxl += 2
continue
# 如果没有回文,则加入新的回文
if i - maxl >= 0 and s[i-maxl: i+1] == s[i-maxl: i+1][::-1]:
start = i - maxl
maxl += 1
return s[start: start + maxl]
欢迎关注我的github:https://github.com/UESTCYangHR