题解 | #编号子回文I#

编号子回文I

https://www.nowcoder.com/practice/db5995cd4783483f8b9f7a9e3b3a479f

key:

  1. 横纵字符串反序构建二维矩阵
  2. 对角线计算dp,同时能保留最大长度与最大串的末尾索引
  3. 利用最大串的末尾索引和最大长度可以找到对应的序列
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]

全部评论

相关推荐

2025-12-10 19:50
山西大学 测试工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务