1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 char s1[1005],s2[1005]; 6 int dp[1005][1005]; 7 int main() 8 { 9 int len1,len2,i,j,t; 10 while (~scanf("%s%s",s1,s2)) 11 { 12 len1=strlen(s1); len2=strlen(s2); 13 for (i=len1;i>=1;i--) 14 s1[i]=s1[i-1]; 15 for (i=len2;i>=1;i--) 16 s2[i]=s2[i-1]; 17 for (i=0;i<=len1;i++) 18 for (j=0;j<=len2;j++) 19 { 20 if (i==0&&j==0) dp[i][j]=0; 21 else if (i==0) dp[i][j]=j; 22 else if (j==0) dp[i][j]=i; 23 else { 24 if (s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]; 25 else dp[i][j]=dp[i-1][j-1]+1; 26 dp[i][j]=min(dp[i][j],min(dp[i-1][j],dp[i][j-1])+1); 27 } 28 } 29 printf("%d\n",dp[len1][len2]); 30 t=0; i=len1; j=len2; 31 while (i>0||j>0) 32 { 33 if (s1[i]==s2[j]&&dp[i][j]==dp[i-1][j-1]){ 34 i--; j--; continue; 35 } 36 printf("%d ",++t); 37 if (j>0&&dp[i][j]==dp[i][j-1]+1){ 38 printf("Insert %d,%c\n",i+1,s2[j]); 39 j--; 40 } 41 else if (i>0&&dp[i][j]==dp[i-1][j]+1){ 42 printf("Delete %d\n",i); 43 i--; 44 } 45 else if (dp[i][j]==dp[i-1][j-1]+1){ 46 printf("Replace %d,%c\n",i,s2[j]); 47 i--; j--; 48 } 49 } 50 } 51 return 0; 52 }
转载于:https://www.cnblogs.com/xiao-xin/articles/4065331.html