编辑距离问题

问题描述:设A和B是2个字符串。要用最少的字符操作将字符A转化为字符B。

字符操作包括:
(1)删除一个人字符。
(2)插入一个字符。
(3)将一个字符改为另一个字符。
将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B 的编辑距离,记为d(A,B)。设计一个算法,对给定的任意两个字符串A和B计算出他们的编辑距离d(A,B).
例如:
输入:
        fxpimu
        xwrs
输出:
        5
分析:


动态规划算法代码:

 

// 编辑距离问题.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#define maxNum 65535
using namespace std;
int minValue(int a,int b,int c)
{
	int min=a;
	if(min>b)
		min=b;
	if(min>c)
		min=c;
	return min;

}
int _tmain(int argc, _TCHAR* argv[])
{
	string a, b;
	cin>>a>>b;
	int m=a.size ();
	int n=b.size ();
	int h;
	int **d=new int *[m+1];
	for(int i=0;i<=m;i++)
		d[i]=new int [n+1];
	for(int i=0;i<=m;i++)
		d[i][0]=i;
	for(int j=0;j<=n;j++)
		d[0][j]=j;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			d[i][j]=maxNum ;
			if(a[i]==b[j])
				h=0;
			else
				h=1;
			d[i][j]=minValue(d[i-1][j-1]+h,d[i-1][j]+1,d[i][j-1]+1);
		}
	}
	cout<<d[m][n]<<endl;
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值