复旦14考研机试真题(2)--计算两个字符串的编辑距离

题目:
把两个字符串变成相同的三个基本操作定义如下:

  • 修改一个字符(如把a 变成b)
  • 增加一个字符(如abed 变成abedd)
  • 删除一个字符(如jackbllog 变成jackblog)

针对于jackbllog 到jackblog 只需要删除一个或增加一个l 就可以把两个字符串变为相同。 把这种操作需要的最小次数定义为两个字符串的编辑距离L。
编写程序计算指定文件中字符串的距离。输入两个长度不超过512 字节的ASCII 字符串,在屏幕上输出字符串的编辑距离。
输入样例

Hello world! 
Hello word! 

输出样例

1
#include
#include
using namespace std;
string a, b;
int dp[520][520];
int min(int a, int b, int c) {
	if (a <= b && a <= c)
		return a;
	else if (b <= a && b <= c)
		return b;
	else
		return c;
}
int main() {
	getline(cin, a);
	getline(cin, b); 
	int lenA = a.length();
	int lenB = b.length();
	for (int i = 0; i < lenA; i++) dp[i][0] = i;
	for (int j = 0; j < lenB; j++) dp[0][j] = j;
	for (int i = 1; i < lenA; i++) {
		for (int j = 1; j < lenB; j++) {
			if (a[i] == b[j])
				dp[i][j] = dp[i - 1][j - 1];
			else
				dp[i][j] = min(dp[i - 1][j - 1] + 1, dp[i - 1][j] + 1, dp[i][j - 1] + 1);
		}
	}
	printf("%d", dp[lenA - 1][lenB - 1]);
	return 0;
}

你可能感兴趣的:(考研复试真题,算法)