#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 20 + 10;
char s1[N], s2[N];
int f[N][N];
int k;
void output(int n, int m);
int main()
{
int len1, len2;
int val;
#ifndef ONLINE_JUDGE
freopen("uva_in.txt", "r", stdin);
#endif
while (scanf("%s", &s1[1]) == 1) {
if (strcmp(&s1[1], "#") == 0) break;
scanf("%s", &s2[1]);
len1 = strlen(&s1[1]);
len2 = strlen(&s2[1]);
f[0][0] = 0;
for (int i = 1; i <= len1; i++) f[i][0] = i;
for (int i = 1; i <= len2; i++) f[0][i] = i;
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
val = (s1[i] == s2[j] ? 0 : 1);
f[i][j] = min(f[i - 1][j - 1] + val, min(f[i - 1][j] + 1, f[i][j - 1] + 1));
}
}
k = 0;
output(len1, len2);
printf("E\n");
}
}
void output(int n, int m)
{
if (n > 0 && m == 0) {
for (int i = 1; i <= n; i++) {
printf("D%c%.2d", s1[i], 1);
k--;
//printf("1\n");
}
return;
} else if (n == 0 && m > 0) {
for (int i = 1; i <= m; i++) {
printf("I%c%.2d", s2[i], i);
k++;
//printf("2\n");
}
return;
} else if (n <= 0 || m < 0) {
return;
}
if (s1[n] == s2[m]) {
output(n - 1, m - 1);
} else if (f[n][m] == f[n - 1][m - 1] + 1) {
output(n - 1, m - 1);
//printf("k=%d\n", k);
printf("C%c%.2d", s2[m], n + k);
} else if (f[n][m] == f[n - 1][m] + 1) {
//k--;
output(n - 1, m);
//k++;
printf("D%c%.2d", s1[n], n + k);
//printf("3\n");
k--;
} else if (f[n][m] == f[n][m - 1] + 1) {
//k++;
output(n, m - 1);
// k--;
printf("I%c%.2d", s2[m], n + k + 1);
//printf("4\n");
k++;
}
}
UVa164 - String Computer
最新推荐文章于 2021-03-14 20:23:58 发布