题解 | #编号子回文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]

全部评论

相关推荐

2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务