class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
# 创建一个二维数组 dp,用于记录回文子串的信息
dp = [[False] * n for _ in range(n)]
start = 0 # 记录最长回文子串的起始位置
max_len = 1 # 记录最长回文子串的长度
# 初始化单个字符和相邻两个字符是回文子串的情况
for i in range(n):
dp[i][i] = True # 单个字符是回文子串
if i < n - 1 and s[i] == s[i + 1]:
dp[i][i + 1] = True # 相邻两个字符是回文子串
start = i
max_len = 2
# 遍历长度为3及以上的子串,更新dp数组
for length in range(3, n + 1):
for i in range(n - length + 1):
j = i + length - 1
# 如果s[i]和s[j]相等,并且s[i+1:j-1]是回文子串,则s[i:j]也是回文子串
if s[i] == s[j] and dp[i + 1][j - 1]:
dp[i][j] = True
start = i
max_len = length
# 根据最长回文子串的起始位置和长度,返回结果
return s[start:start + max_len]
10-19
453
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交