1 条题解

  • 0
    @ 2025-2-14 21:20:39

    C :

    #include "stdio.h"
    int L[1001][1001];
    char a[1000],b[1000];
    int d1,d2;
    int min(int a,int b,int c)
    {
    	if(a>b)
    		a=b;
    	if(a>c)
    		a=c;
    	return a;
    }
    int main()
    {
    	int i,j;
    	while(gets(a)!=NULL)
    	{
    		gets(b);
    		d1=strlen(a);
    		d2=strlen(b);
    		for(i=0,j=0;j<=d2;j++)
    			L[i][j]=j;
    		for(i=0,j=0;i<=d1;i++)
    			L[i][j]=i;
    		for(i=0;i<d1;i++)
    			for(j=0;j<d2;j++)
    				if(a[i]==b[j])
    					L[i+1][j+1]=L[i][j];
    				else
    					L[i+1][j+1]=min(L[i+1][j]+1,L[i][j+1]+1,L[i][j]+1);	
    				printf("%d\n",L[d1][d2]);
    	}
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int f[255][255]={0};
    int main()
    {
        string s1,s2;
        int i,j,len1,len2;
        while (cin>>s1>>s2)
        {
            memset(f,0x7f,sizeof(f));
            f[0][0]=0;
            len1=s1.size();  len2=s2.size();        
            for (i=0;i<=len1;i++)
                for (j=0;j<=len2;j++)                
                     if (i>0||j>0)   
                        if (i>0&&j>0&&s1[i-1]==s2[j-1]) f[i][j]=f[i-1][j-1];
                        else {
                            if (j>0) f[i][j]=min(f[i][j],f[i][j-1]+1);  //删除 
                            if (i>0&&j>0) f[i][j]=min(f[i][j],f[i-1][j-1]+1); //改写 
                            if (i>0) f[i][j]=min(f[i][j],f[i-1][j]+1); //插入
                        }
            cout<<f[len1][len2]<<endl;
        }
        return 0;    
    }
    
    
    • 1

    信息

    ID
    759
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者