编程开发中如何实现最小编辑距离
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章将为大家详细讲解有关编程开发中如何实现最小编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。题目描述:给定两个单词 word1 和 word2,计算出将
千家信息网最后更新 2025年11月15日编程开发中如何实现最小编辑距离
这篇文章将为大家详细讲解有关编程开发中如何实现最小编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
题目描述:
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
示例 1:
输入: word1 = "horse", word2 = "ros"
输出: 3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
示例 2:
输入: word1 = "intention", word2 = "execution"
输出: 5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')
# -*- coding: utf-8 -*-class Solution: """ 从word1->word2,对于word1的每个字符,可以有插入、删除、替换三种操作。 碰到这种题我们应该先想到的是这是一道可以用动态规划解决的问题,因为我们是要从一个复杂的问题中 求解一个最优值,而这个复杂问题可以分解成多个子问题。例如,我们已经将word1[:-1]到word2的最小 编辑距离找到了,那么再计算word1->word2的编辑距离的时候就会变得容易许多。 既然已经知道要用到动态规划,那么动态规划的解题步骤就是先找出状态转移方程,然后对状态进行初始化 假设dp[i][j]代表将word1[:i] -> word2[:j]所需的最小编辑距离,那么当我们已知dp[i-1][j-1] 的时候,要求dp[i][j]的话可以有以下两种情况: 1. word1[i - 1] == word2[j - 1]: 这种情况我们不需要对word1[i-1]做任何操作,等价于dp[i-1][j-1] 即:dp[i][j] = dp[i-1][j-1] 2. word1[i - 1] != word2[j - 1]: 这时候我们要想到,我们已经用一个二维的状态矩阵保存了不同情况下的最优值,应该要想办法利用已 知的最优值来找到当前状态的最优值。 a) 删除 由于我们已知dp[i - 1][j],这代表了将word1[: i - 1]->word2[: j]的最小编辑距离, 如果我们先将word1[: i - 1]->word2[: j],然后将word1[i - 1]删除,那么就可以实现 word1[:i] -> word2[:j]. 因此,dp[i][j] = dp[i - 1][j] + 1; b) 插入 由于我们已知dp[i][j - 1],这代表了将word1[: i]->word2[: j - 1]的最小编辑距离, 如果我们先将word1[: i]->word2[: j - 1],然后再在word1[: i]后面增加word2[j - 1] 那么就可以实现word1[:i] -> word2[:j]。 因此,dp[i][j] = dp[i][j - 1] + 1 c) 替换 由于我们已知dp[i - 1][j - 1],这代表了将word1[: i - 1]->word2[: j - 1]的 最小编辑距离,如果我们先将word1[: i - 1]->word2[: j - 1],然后再将word1[i]替换成 word2[j],那么就可以实现word1[:i] -> word2[:j]。 那么也可以实现word1[:i] -> word2[:j]。 因此,dp[i][j] = dp[i - 1][j - 1] + 1 上述的a)b)c)都是可行的,而我们需要的是最小的编辑距离,因此就需要从上述的三种操作中选择 最小的一种 """ def minDistance(self, word1: str, word2: str) -> int: rows = len(word1) cols = len(word2) # 初始化状态矩阵 dp = [[0] * cols for _ in range(rows)] for i in range(cols): dp[0][i] = i for j in range(rows): dp[j][0] = j # 根据状态转换方程进行状态更新 for i in range(1, rows): for j in range(1, cols): if word1[i - 1] == word2[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) # 动态规划的最后一个状态就是我们需要的结果 return dp[-1][-1]
关于"编程开发中如何实现最小编辑距离"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
最小
状态
代表
动态
字符
问题
规划
情况
篇文章
先将
开发
编程
复杂
单词
就是
方程
时候
更多
矩阵
示例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳市威隆网络技术有限公司
网络安全知识框架分享
网络安全员法制花絮
通州西集国家网络安全园位置
数据库的数据备份
网络安全等级保护三级防护能力
数据库推荐书籍
数据库是哪个软件开发
车载网络技术期末考试试卷
网络安全法对运营者的挑战
餐饮软件开发是什么
密云区推广网络技术软件
天津亿览在线网络技术
网络安全工程师证书发放
网络安全教育视频2020年
usb打印机服务器是什么原理
深圳软件开发报价
北京联想服务器虚拟化哪家好
驱动精灵一直服务器走丢
兰州服务器什么牌子好
乡镇网络安全工作存在问题
运维怎么管理几千台服务器
滁州h3c塔式服务器
信息网络安全负责人
考勤表和工资表数据库
购买软件开发技术
手机数据库优化程度差
关于网络安全的小知识30字
闵行区品质网络技术服务批发价格
数据库查询所有系的信息