题目:5. 最长回文子串
难度:中等
给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
一、模式识别
1.动态规划
编辑字符 》 动态规划:子序列问题:回文问题
1.dp含义:以i开头且j结尾的序列是否回文
2.初始化:全False
3.递推公式:即回文的递推公式:当前字符相等且i + 1, j - 1也为回文
4.遍历顺序:i从后往前,j从前往后或i从前往后,j从后往前
5.示例:略
二、代码实现
1.动态规划
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
head, tail = 0, 0
dp = [[False] * n for _ in range(n)]
for i in range(n - 1, -1, -1):
for j in range(i, n):
if s[i] == s[j] and (j - i <= 1 or dp[i + 1][j - 1]):
dp[i][j] = True
if j - i >= tail - head: head, tail = i, j
return s[head: tail + 1]