测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A51991. 编辑距离

填空题 较难

题目描述

编辑距离

题目描述

设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

    1、删除一个字符;

    2、插入一个字符;

    3、将一个字符改为另一个字符。

对任意的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。

输入

第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。

输出

只有一个正整数,为最少字符操作次数。

输入样例

sfdqxbw

gfdgw

输出样例

4

参考答案

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 3001 #define MOD 2520 #define E 1e-12 using namespace std; char a[N],b[N]; int f[N][N]; int main() { scanf("%s%s",a+1,b+1); int n=strlen(a+1); int m=strlen(b+1); for(int i=1; i<=n; i++) f[i][0]=i; for(int i=1; i<=m; i++) f[0][i]=i; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if(a[i]==b[j]) 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; cout<<f[n][m]<<endl; return 0; }
上一题 下一题