编程开发中如何实现最小编辑距离
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关编程开发中如何实现最小编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。题目描述:给定两个单词 word1 和 word2,计算出将
千家信息网最后更新 2026年11月04日编程开发中如何实现最小编辑距离
这篇文章将为大家详细讲解有关编程开发中如何实现最小编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
题目描述:
给定两个单词 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安全错误
数据库的锁怎样保障安全
互联网科技名片
互联网科技工作委员会毛军
互联网科技公司华为
互联网核心科技是什么
科技信息互联网
互联网科技开发公司
合肥互联网科技公司
狮子座互联网科技
壹账通互联网科技
互联网科技logo设计
互联网科技创新企业排名
互联网科技产品
全球顶尖互联网科技公司
重庆互联网医院沙龙医盟信息科技
注册互联网科技公司经营范围大全
东莞新华互联网科技学校
互联网科技年终奖
珠海东科互联网科技有限公司
青岛互联网科技园
上海旺乐尼互联网科技有限公司
电子科技大学互联网
上游互联网科技
中国互联网金融科技基金
广西拼得多互联网科技有限公司
隆华科技工业互联网
互联网科技实习生岗位职责
互联网科技扶贫时间
科技互联网专业务虚会材料
重庆科技产业互联网有哪些
山东亿川互联网科技有限责任公司