题解 | #编号子回文I#
编号子回文I
https://www.nowcoder.com/practice/db5995cd4783483f8b9f7a9e3b3a479f
key:
- 横纵字符串反序构建二维矩阵
- 对角线计算dp,同时能保留最大长度与最大串的末尾索引
- 利用最大串的末尾索引和最大长度可以找到对应的序列
class Solution: def longestPalindrome(self , s: str) -> str: s_ = s[::-1] lenth = len(s) dp = [[0] * lenth for _ in range(lenth)] for i in range(lenth): if s[i] == s_[0]: dp[i][0] = 1 if s_[i] == s[0]: dp[0][i] = 1 MAX = 1 result_i = 0 for i in range(1, lenth): for j in range(1, lenth): if s[i] == s_[j]: dp[i][j] = dp[i - 1][j - 1] + 1 if dp[i][j] > MAX: MAX = dp[i][j] result_i = i return s[result_i - MAX + 1: result_i + 1]