72. Edit Distance Hard

本文详细介绍了一种计算两个字符串之间编辑距离的算法实现过程。通过动态规划的方法,利用二维数组存储中间结果,有效地解决了编辑距离的问题。文章给出了具体的代码实现,并解释了如何根据不同情况更新编辑距离。

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

//用dis[i][j]来表示s1长度为i的子串和s2长度为j的子串的编辑距离 
//if i == 0 且 j == 0,edit(i, j) = 0
//if i == 0 且 j > 0,edit(i, j) = j
//if i > 0 且j == 0,edit(i, j) = i
//if i >= 1  且 j >= 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + f(i, j) }
//s1第i个字符与s2第j个字符相等是为0,不等时需要替换,为1 

int min(int a, int b, int c) //求三个数的最小值 
{
	int min = a;
	if(b < min)min = b;
	if(c < min)min = c;
	return min;
}

int distances(string s1, string s2)
{
	int dis[s1.length() + 1][s2.length() + 1]; //下标范围是0到字符串的长度 
	dis[0][0] = 0;
	//第一行与第一列都为0 
	for(int i = 1; i <= s2.length(); i++)dis[0][i] = i;	
	for(int i = 1; i <= s1.length(); i++)dis[i][0] = i;
	
	for(int i = 1; i <= s1.length(); i++){
		for(int j = 1; j <= s2.length(); j++){
			int flag = s1[i - 1] == s2[j - 1] ? 0 : 1; //第i个字符下标为i-1 
			dis[i][j] = min(dis[i - 1][j] + 1, dis[i][j - 1] + 1, dis[i - 1][j - 1] + flag);
		}
	}
	
	return dis[s1.length()][s2.length()];		
}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值