题解链接:https://leetcode.cn/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/
class Solution:
def longestPalindrome(self,s:str) -> str:
n = len(s)
# 长度为1必定是回文
if len(s) == 1:
return s
# 初始化动态规划矩阵,动态规划方向为平行对角线方向向上
adj = [[False] * n for _ in range(n)]
# 初始化长度,起止位置变量
max_len = 0
max_b = 0
max_j = 0
# 长度为2开始便利
for l in range(2,n+1):
for b in range(n):
# 根据长度计算出末尾位置
j = b + l - 1
if j >= n:
break
# 首位不一致,则一定不是回文
if s[b] != s[j]:
adj[b][j] = False
else:
# 长度小于等于3可以直接判断,不用使用递推
if l <= 3:
adj[b][j] = True
else:
# 长度大于3需要使用递推
adj[b][j] = adj[b+1][j-1]
if adj[b][j] and l > max_len:
max_len = l
max_b = b
max_j = j
return s[max_b:max_j+1]