题目描述:给你一个字符串 s,找到 s 中最长的回文子串。
我们可以使用动态规划来解决这个问题,通过构建一个二维数组来记录子串是否为回文。
def longest_palindrome(s):
n = len(s)
dp = [[False] * n for _ in range(n)]
start, max_length = 0, 1
for i in range(n):
dp[i][i] = True
for length in range(2, n + 1):
for i in range(n - length + 1):
j = i + length - 1
if s[i] == s[j]:
if length == 2:
dp[i][j] = True
else:
dp[i][j] = dp[i + 1][j - 1]
if dp[i][j] and length > max_length:
start, max_length = i, length
return s[start:start + max_length]
返回主页