求助,为什么这样思考是错的
查看原帖
求助,为什么这样思考是错的
785513
Fischl322楼主2023/4/12 21:14

我的想法是先找到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");
}
2023/4/12 21:14
加载中...