
题目链接:P2758「编辑距离」 。
设 A 和 B 是两个字符串。我们要用最少的字符操作次数,将字符串 A 转换为字符串 B 。这里所说的字符操作共有三种:
!皆为小写字母!
第一行为字符串 A ;第二行为字符串 B ;字符串 A 和 B 的长度均小于 2000 。
只有一个正整数,为最少字符操作次数。
sfdqxbw
gfdgw4易知编辑距离是对称的,即将字符串 A 变成字符串 B 和将字符串 B 变成字符串 A 所需的最小操作数是一样的,也就是字符串 A 、B 之间的编辑距离。然后直觉感觉就是一道简单的 dp 题:
之间的编辑距离,则有如下转移方程:
# include <bits/stdc++.h>
# define MAXLEN 2005
using namespace std;
char a[MAXLEN], b[MAXLEN];
int f[MAXLEN][MAXLEN];
int main()
{
scanf("%s%s", a, b);
int alen = strlen(a);
int blen = strlen(b);
f[0][0] = 0;
for(int i = 1; i <= alen; ++i) {
f[i][0] = i;
}
for(int j = 1; j <= blen; ++j) {
f[0][j] = j;
}
for(int i = 1; i <= alen; ++i) {
for(int j = 1; j <= blen; ++j) {
if(a[i-1] == b[j-1]) {
f[i][j] = f[i-1][j-1];
} else {
f[i][j] = min(f[i-1][j], min(f[i][j-1], f[i-1][j-1])) + 1;
}
}
}
int ans = f[alen][blen];
printf("%d\n", ans);
return 0;
}