72. Edit Distance Hard

//用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、付费专栏及课程。

余额充值