• 【Leetcode刷题Python】516. 最长回文子序列


    1 题目

    给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

    子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

    示例 1:

    输入:s = “bbbab”
    输出:4
    解释:一个可能的最长回文子序列为 “bbbb” 。

    示例 2:

    输入:s = “cbbd”
    输出:2
    解释:一个可能的最长回文子序列为 “bb” 。

    2 解析

    leetcoe 1143题思路一样的,区别在于,只需要将字符串逆转,求最长公共子序列即可。
    求最长公共子序列的思路如下
    在这里插入图片描述
    思路:如果 t e x t 1 [ i ] = = t e x t 2 [ j ] text1[i]==text2[j] text1[i]==text2[j],则在矩阵中是从左上角往右下角沿着对角线移动,如果不等于,即i+1或者j+1的情况时,在矩阵中是右移和下移。所以状态转移是,两种情况,第一种,相等,则dp+1,向右下角移动,不相等,取前上面和左边的dp中最大值。

    状态: dp[i][j]表示i行j列的矩阵中,最长的公共子数组

    状态转移:
    dp [ i ] [ j ] = { dp [ i − 1 ] [ j − 1 ] + 1 , text 1 [ i − 1 ] = text 2 [ j − 1 ] max ⁡ ( dp [ i − 1 ] [ j ] , dp [ i ] [ j − 1 ] ) , text 1 [ i − 1 ] ≠ text 2 [ j − 1 ] \textit{dp}[i][j] =

    {dp[i1][j1]+1,text1[i1]=text2[j1]max(dp[i1][j],dp[i][j1]),text1[i1]text2[j1]" role="presentation" style="position: relative;">{dp[i1][j1]+1,text1[i1]=text2[j1]max(dp[i1][j],dp[i][j1]),text1[i1]text2[j1]
    dp[i][j]={dp[i1][j1]+1,max(dp[i1][j],dp[i][j1]),text1[i1]=text2[j1]text1[i1]=text2[j1]

    最终计算得到dp[m][n] 即为text1和text2的最长公共子序列的长度。

    3 python实现

    class Solution:
        def longestPalindromeSubseq(self, s: str) -> int:
            s2 = s[::-1]
            n = len(s)
            dp = [[0]*(n+1) for _ in range(n+1)]
            for i in range(1,n+1):
                for j in range(1,n+1):
                    if s[i-1]==s2[j-1]:
                        dp[i][j] = dp[i-1][j-1]+1
                    else:
                        dp[i][j] = max(dp[i-1][j],dp[i][j-1])
            return dp[n][n]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    2023.11.16使用原生js和canvas实现图片矩形框标注功能
    Unity DOTS系列之Aspect核心机制分析
    JS--拷贝数组的方法(浅拷贝)
    工业级路由器如何异地组网及其作用
    Android 需要动态申请的权限和普通权限
    前言技术 VScode + 其他插件-1
    基于ssm物业报修管理系统毕业设计源码111024
    After Effects动态图形和数据可视化
    使用 Wireshark 实现 ARP 嗅探监听网络
    shiro使用(简单记住我下次自动登录流程)附cookie内容为deleteme的最终解决方法
  • 原文地址:https://blog.csdn.net/weixin_43935696/article/details/126794674