两个字符串之间的最短编辑距离

1.算法原理

编辑距离(Edit Distance)是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数,编辑操作包括增、删、改操作。
例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g),最短编辑距离为3.
跟“最长公共子序列”一样,我们采用一个二维数组来保存字符串X和Y当前的位置的最小编辑距离。

现有两个序列X={x1,x2,x3,...xi},Y={y1,y2,y3,....,yi},
设一个C[i,j]: 保存Xi与Yj的当前最小的LD。
①:当 Xi = Yi 时,则C[i,j]=C[i-1,j-1];
②:当 Xi != Yi 时, 则C[i,j]=Min{C[i-1,j-1],C[i-1,j],C[i,j-1]}+1;

最终我们的C[i,j]一直保存着最小的LD。

具体过程如下图所示:


2.Java实现

public static int[][] getLD(String str1, String str2)
{
	int leng1 = str1.length();
	int leng2 = str2.length();
	int[][] lens = new int[leng1+1][leng2+1];
	//首先初始化数组的第一行和第一列
	for(int i=0; i<=leng1; i++)
	{
		lens[i][0] = i;
	}
	for(int i=0; i<=leng2; i++)
	{
		lens[0][i] = i;
	}
	//计算数组其他位置的大小
	for(int i=1; i<=leng1; i++)
	{
		for(int j=1; j<=leng2; j++)
		{
			if(str1.charAt(i-1) == str2.charAt(j-1))
			{
				lens[i][j] = lens[i-1][j-1];
			}
			else
			{
				int tmp = Math.min(lens[i][j-1], lens[i-1][j]);
				lens[i][j] = Math.min(tmp, lens[i-1][j-1]) + 1;
			}
		}
	}
	return lens;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值