我的想法是先找到a串和b串里面较长的一串,如果a串更长,那么对于a来说就只需要进行修改和删除操作去变成b,因为b串是比a串短的那么对于a串来说修改和删除肯定要比增加好,那么不就不用去枚举对a串增加的状态了吗??but这样好像是错的但我又不知道错在哪里求大佬解答
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
char a[N],b[N],t[N];
int f[N][N],lena,lenb;
//sfdqxbw
//gfdgww
int main()
{
scanf("%s",a+1);
scanf("%s",b+1);
lena = strlen(a+1);
lenb = strlen(b+1);
if(lenb > lena)
{
swap(lena,lenb);
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
for(int i = 0; i <= lena; i++)
{
f[i][0] = i;
}
for(int i = 0; i <= lenb; i++)
{
f[0][i] = i;
}
for(int i = 1; i <= lena; i++)
{
for(int j = 1; j <= lenb; j++)
{
f[i][j] = min(f[i - 1][j - 1] + 1,f[i - 1][j] + 1);
if(a[i] == b[j]) f[i][j] = min(f[i][j],f[i - 1][j - 1]);
}
}
printf("%d",f[lena][lenb]);
system("pause");
}