4 solutions

  • 4
    @ 2024-4-3 21:25:27

    代码

    #include <bits/stdc++.h>
    using namespace std;
    string a,b;
    int f[1005][1005];
    int main(int argc, char **argv){
    	int n;
    	cin >> n;
    	while (n--){
    		cin >> a >> b;
    		int l1 = a.size(),l2 = b.size();
    		// memset(f,0,sizeof(f));
    		for (int i = 1;i <= l1;i++)	f[i][0] = i;
    		for (int j = 1;j <= l2;j++)	f[0][j] = j;
    
    		for (int i = 1;i <= l1;i++){
    			for (int j = 1;j <= l2;j++){
    				int si = i - 1,sj = j - 1;
    				if (a[si] == b[sj])	f[i][j] = f[i - 1][j - 1];
    				else	f[i][j] = min({f[i - 1][j - 1],f[i - 1][j],f[i][j - 1]}) + 1;
    			}
    		}
    		printf("%d\n",f[l1][l2]);
    	}
    	return 0;
    }
    
    • 1
      @ 2024-4-6 20:51:48
      #include<iostream>
      #include<cstring>
      #include<algorithm>
      using namespace std;
      const int N=1005;
      int f[N][N];
      
      int main(){
          int n;
          cin>>n;
          while(n--){
              string s1,s2;
              cin>>s1>>s2;
              int l1=s1.length(),l2=s2.length();
              memset(f,127,sizeof(f));
              for(int i=0;i<=l1;i++)f[0][i]=i;
              for(int i=1;i<=l2;i++)f[i][0]=i;
              f[0][0]=0;
              for(int i=1;i<=l2;i++)
                  for(int j=1;j<=l1;j++){
                      f[i][j]=f[i-1][j-1]+(s2[i-1]==s1[j-1]?0:1);
                      f[i][j]=min(f[i][j],min(f[i-1][j],f[i][j-1])+1);
                  }
              cout<<f[l2][l1]<<endl;
          }
          return 0;
      }
      
      • 0
        @ 2024-4-6 11:47:15
        #include<bits/stdc++.h>
        using namespace std;
        string a;
        string b;
        int f[1000][1000];
        int main(){
        	int n;
        	cin>>n;
        	for(int k=1;k<=n;k++){
        		memset(f,0,sizeof(f));
        		cin>>a>>b;
        		for(int i=1;i<=a.size();i++){
        			f[i][0]=i;
        		}
        		for(int i=1;i<=b.size();i++){
        			f[0][i]=i;
        		}
        		for(int i=1;i<=a.size();i++){
        			for(int j=1;j<=b.size();j++){
        				if(a[i-1]==b[j-1]){
        					f[i][j]=f[i-1][j-1];
        				}
        				else{
        					f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
        				}
        			}
        		}
        		cout<<f[a.size()][b.size()]<<endl;
        	}	
        }
        
        • -13
          @ 2024-4-3 20:57:08

          80 WA 歹马,暂存

          #include <bits/stdc++.h>
          using namespace std;
          string a,b;
          int f[1005][1005];
          int main(int argc, char **argv){
          	int n;
          	cin >> n;
          	while (n--){
          		cin >> a >> b;
          		int l1 = a.size(),l2 = b.size();
          		for (int i = 0;i < l1;i++)	f[i][0] = i;
          		for (int j = 0;j < l2;j++)	f[0][j] = j;
          
          		for (int i = 1;i <= l1;i++){
          			for (int j = 1;j <= l2;j++){
          				int si = i - 1,sj = j - 1;
          				if (a[si] == b[sj])	f[i][j] = f[i - 1][j - 1];
          				else	f[i][j] = min({f[i - 1][j - 1],f[i - 1][j],f[i][j - 1]}) + 1;
          			}
          		}
          		printf("%d\n",f[l1][l2]);
          	}
          	return 0;
          }
          
          • 1

          Information

          ID
          783
          Time
          1000ms
          Memory
          256MiB
          Difficulty
          8
          Tags
          # Submissions
          76
          Accepted
          12
          Uploaded By