首页 > 其他 > 详细

力扣516题、72题(最长回文子序列,编辑距离)

时间:2021-03-15 00:14:45      阅读:27      评论:0      收藏:0      [点我收藏+]

516、最长回文子序列

基本思想:

动态规划运用二维dp数组

具体实现:

1、确定状态:

(1)最后一步----字符串s[i:j]中的最长回文子序列

(2)子问题

技术分享图片

 

 2、转移方程

(1)s[i]==s[j]

把字符串左右同时缩小一下+2,上图情况1 +2

(2)s[i]!=s[j]

不相等的话说明这两个字符不可能同时出现在s[i:j]的最长回文子序列

选择上图情况2和3较大的一个

3、初始状态

dp[i][i] = 1

4、计算顺序

从左到右  知道j,要先知道 j-1

从下到上  知道i,要先知道 i+1

技术分享图片

 

 代码:

class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        n = len(s)
        dp=[[0]*n for i in range(n)]
        for i in range(n):
            dp[i][i] = 1
        for i in range(n-2,-1,-1):
            for j in range(i+1,n):
                if s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1] +2
                else:
                    dp[i][j] = max(dp[i+1][j],dp[i][j-1])
        return dp[0][n-1]

 

72、编辑距离

 

力扣516题、72题(最长回文子序列,编辑距离)

原文:https://www.cnblogs.com/zhaojiayu/p/14532590.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!