1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std;
int find_min(int a, int b, int c){ int ans = a; if(b < ans) ans = b; if(c < ans) ans = c; return ans; }
int main(){ char s1[1000], s2[1000]; int num1, num2; while(scanf("%d%s", &num1, &s1[1]) != EOF){ scanf("%d%s", &num2, &s2[1]); int graph[1000][1000]={0};
for(int i = 0; i < 1000; ++i){ graph[0][i]=i; graph[i][0]=i; } for(int i = 1; i <= num1; ++i){ for(int j = 1; j <= num2; ++j){ int num_re = graph[i-1][j-1]; if(s1[i] != s2[j]) num_re++; graph[i][j] = find_min(num_re, graph[i-1][j]+1, graph[i][j-1]+1); } } cout << graph[num1][num2] << endl; } return 0 ; }
|