最长回文子串
题目描述#
难度中等
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
解题步骤#
动态规划解法,时间复杂度和空间复杂度都是。
class Solution:
def longestPalindrome(self, s: str) -> str:
# 动态规划解法
# dp[i][j]表示s[i:j+1]是否为回文串
# 边界条件:dp[i][i] = True; dp[i][i+1] = s[i] == s[i+1]
# 状态转移方程:dp[i][j] = dp[i+1][j-1] and s[i] == s[j]
n = len(s)
max_len = 1
res = s[0]
dp = [[False] * n for i in range(n)]
for i in range(n):
dp[i][i] = True
for i in range(n-1, -1, -1):
for j in range(i+1, n):
if j == i + 1:
dp[i][i+1] = s[i] == s[i+1]
if s[i] == s[i+1] and max_len == 1:
max_len = 2
res = s[i:i+2]
else:
flag = dp[i+1][j-1] and s[i] == s[j]
dp[i][j] = flag
if flag and j - i + 1 > max_len:
max_len = j - i + 1
res = s[i:j + 1]
return res
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步