当前位置: 首页 > article >正文

算法刷题Day27:BM65 最长公共子序列(二)

题目链接,点击跳转

题目描述:

在这里插入图片描述

考点:动态规划 回溯

解题思路:

s1=abc, s2=adc 的dp数组和used数据状态转移示例图

s1=abc, s2=adc 示例图

代码:

class Solution:
    def LCS(self , s1: str, s2: str) -> str:
        len1 = len(s1)
        len2 = len(s2)
        dp = [[0 for _ in range(len1+1)] for _ in range(len2+1)]
        used = [[0 for _ in range(len1+1)] for _ in range(len2+1)]
        for i in range(1,len2+1):
            for j in range(1,len1+1):
                if s1[j-1] == s2[i-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                    used[i][j] = 1
                    continue                   # 忽略以下继续下一个循环
                elif dp[i][j-1] >= dp[i-1][j]: # 左 > 上
                    dp[i][j] = dp[i][j-1]
                    used[i][j] = 2
                    continue
                else:                          # 上 > 左
                    dp[i][j] = dp[i-1][j]
                    used[i][j] = 3         
        # 使用回溯法寻找路径
        result = []
        def backtrack(i,j,path):
            # 结束条件:到边节点
            if i==0 or j==0:
                result.append(path[::-1])
                return
            if used[i][j] == 1:
                backtrack(i-1,j-1, path+s2[i-1])
            elif used[i][j] == 2:
                backtrack(i,j-1, path)
            elif used[i][j] == 3:
                backtrack(i-1,j,path)
        backtrack(len2,len1,'')
        if result == [] or result[0] == '':
            return '-1'
        else:
            return result[0]

写毕业论文之后,算法又再一次被搁置。虽然提不上爱好,但只是想赶上,彼时我只慕我自己。


http://www.kler.cn/a/517938.html

相关文章:

  • 【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?
  • Node.js下载安装及环境配置
  • 通过配置核查,CentOS操作系统当前无多余的、过期的账户;但CentOS操作系统存在共享账户r***t
  • 万字长文总结前端开发知识---JavaScriptVue3Axios
  • 一文了解二叉树的基本概念
  • 检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
  • SpringCloud两种注册中心
  • 代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)
  • 《网络安全中的“泛洪”攻击:揭秘、防范与应对策略》
  • TIM编码器接口函数及应用
  • 环境变量配置与问题解决
  • Gin 学习笔记
  • JAVA实战开源项目:在线旅游网站(Vue+SpringBoot) 附源码
  • 【Linux跬步积累】——thread封装
  • 使用Pytest Fixtures来提升TestCase的可读性、高效性
  • Java 实现Excel转HTML、或HTML转Excel
  • 「 机器人 」系统辨识实验浅谈
  • 如何有效进行软件集成测试?常见的集成测试工具分享
  • 工程数学速记手册(下)
  • 汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动
  • 前端react后端java实现提交antd form表单成功即导出压缩包
  • LMI Gocator GO_SDK VS2019引用配置
  • 【2025美赛D题】为更美好的城市绘制路线图建模|建模过程+完整代码论文全解全析
  • ThinkPhp伪静态设置后,访问静态资源也提示找不到Controller
  • 【新人系列】Python 入门(二十九):常用标准库 - 下
  • 【Git】如何在 Git 提交后补充 Change-Id