《leetcode-go》编辑距离

该博客讨论了如何计算两个单词之间的最小编辑距离,即通过插入、删除和替换字符将一个单词转换为另一个单词所需的最少步骤。算法采用动态规划实现,通过构建二维数组来存储中间过程的状态,最终得到目标单词的转换步数。此方法在文本编辑、拼写检查等领域有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。
你可以对一个单词执行以下3种操作:
a)在单词中插入一个字符
b)删除单词中的一个字符
c)替换单词中的一个字符

思路:画一个二维数组状态,表示i个word的字符变为j个需要多少步,

字符相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m-1个字符需要的步数 )

不相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m个字符 和 n个字符变为m-1个字符 和 n-1个字符变为m-1个字符需要的步数) 中的最小值  +  1

package main

/**
  * 
  * @param word1 string字符串 
  * @param word2 string字符串 
  * @return int整型
*/
func minDistance( word1 string ,  word2 string ) int {
    // write code here
    distance := make(map[int]map[int]int)
	tmp := make(map[int]int)
	tmp[0] = 0
	distance[0] = tmp
	for i := 0; i < len(word1); i++ {
		tmp := make(map[int]int)
		tmp[0] = i + 1
		distance[i+1] = tmp
	}
	for j := 0; j < len(word2); j++ {
		distance[0][j+1] = j + 1
	}
	for i := 0; i < len(word1); i++ {
		for j := 0; j < len(word2); j++ {
			if word1[i] == word2[j] {
				distance[i+1][j+1] = distance[i][j]
			} else {
				min := distance[i][j]
				if min > distance[i+1][j] {
					min = distance[i+1][j]
				}
				if min > distance[i][j+1] {
					min = distance[i][j+1]
				}
				distance[i+1][j+1] = min + 1
			}
		}
	}
	return distance[len(word1)][len(word2)]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值