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

编辑距离 -- 动规

72. 编辑距离

给出动规的两种常见实现形式:自顶向下、自底向上,前者一般借助递归函数+备忘录实现,后者通常基于dp数组实现。


class MinDistance:"""72. 编辑距离https://leetcode.cn/problems/edit-distance/"""def solution(self, s1: str, s2: str) -> int:"""递归解法 + 备忘录自顶向下:param s1::param s2::return:"""#  memo[i][j] 表示 s1[0..i] 和 s2[0..j] 的最⼩编辑距离m, n = len(s1), len(s2)self.memo = [[-1 for _ in range(n)] for _ in range(m)]return self.dp(s1, m-1, s2, n-1)def dp(self, s1, i, s2, j):"""自顶向下:param s1::param i::param s2::param j::return: s1[0..i] 和 s2[0..j] 的最⼩编辑距离"""# base caseif i == -1:return j+1if j == -1:return i+1if self.memo[i][j] != -1:return self.memo[i][j]if s1[i] == s2[j]:self.memo[i][j] = self.dp(s1, i-1, s2, j-1)else:self.memo[i][j] = min(self.dp(s1, i-1, s2, j) + 1,  # 删除self.dp(s1, i, s2, j-1) + 1,  # 插入self.dp(s1, i-1, s2, j-1) + 1,  # 替换)return self.memo[i][j]def solution2(self, s1: str, s2: str) -> int:"""dp table自底向上 求解:param s1::param s2::return:"""#  dp[i+1][j+1] 表示 s1[0..i] 和 s2[0..j] 的最⼩编辑距离m, n = len(s1), len(s2)dp = [[-1 for _ in range(n+1)] for _ in range(m+1)]# base casefor i in range(m+1):dp[i][0] = ifor j in range(n+1):dp[0][j] = jfor i in range(1, m+1):for j in range(1, n+1):if s1[i-1] == s2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = min(dp[i - 1][j - 1] + 1,dp[i][j - 1] + 1,dp[i - 1][j] + 1)return dp[m][n]
http://www.lryc.cn/news/164724.html

相关文章:

  • douyin【商品抢购js脚本】
  • 常见Web安全技术总结!474页Web安全从入门到精通(附PDF)
  • Prometheus 监控指南:如何可靠地记录数字时间序列数据
  • rsync远程同步+inotify监控
  • 【面试经典150 | 数组】移除元素
  • 玩转Mysql系列 - 第21篇:什么是索引?
  • 预处理指令
  • 强大的JTAG边界扫描(1):基本原理介绍
  • 【C++】源文件.cpp和头文件.h分离编程
  • 报错ssh: Could not resolve hostname
  • 从零开始学网站建设:从需求分析到上线发布
  • 软件系统验收测试需要注意的地方
  • 解决three.js中加载纹理贴图时,初次渲染不显示的问题
  • Git学习记录
  • 建筑模板木模好还是钢模好
  • 写代码中碰到的错误
  • java文件传输简单方法
  • Vue3后台管理系统Element-plus_侧边栏制作_无限递归
  • PCIe基础概念
  • GE IS220PVIBH1A 336A4940CSP16 数字输入模块
  • 比特币与火人节
  • Nginx 中 location 和 proxy_pass 斜杠/ 问题
  • 【Spring】开发框架Spring核心技术含Resource接口详细讲解
  • 【随想】每日两题Day.5 (实则一题)
  • 【LeetCode刷题笔记】动态规划 — 70.爬楼梯
  • 2024腾讯校招后端面试真题汇总及其解答(三)
  • mysql的分组group by
  • Swoole 介绍以及 编译安装
  • Ubuntu终端指令
  • python给json 转实体类加注释的代码实现