p1953_lcs.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 32 行

CPP
32
字号
#include <stdio.h>
#include <string.h>
#define  MAXN      200
#define  max(a,b) (a>b?a:b)
char     Str1 [MAXN] , Str2 [MAXN] , Opt [MAXN] [MAXN];

int      len1 , len2;

void     Work ( int a , int b )
{
         if ( a == 0 && b == 0 ) return;
         if ( a == 0 ) { Work ( a , b - 1 ); printf ( "%c" , Str2 [b - 1] ); return; }
         if ( b == 0 ) { Work ( a - 1 , b ); printf ( "%c" , Str1 [a - 1] ); return; }
         if ( Str1 [a - 1] == Str2 [b - 1] ) { Work ( a - 1 , b - 1 ); printf ( "%c" , Str1 [a - 1] ); return; }
         if ( Opt [a - 1] [b] == Opt [a] [b] ) { Work ( a - 1 , b ); printf ( "%c" , Str1 [a - 1] ); return; }
         Work ( a , b - 1 ); printf ( "%c" , Str2 [b - 1] );
}

main ()
{
     while ( scanf ( "%s%s" , Str1 , Str2 ) != EOF ) {
           memset ( Opt , 0 , sizeof ( Opt ));
           len1 = strlen ( Str1 ) , len2 = strlen ( Str2 );
           for ( int i = 1; i <= len1; i ++ )
               for ( int j = 1; j <= len2; j ++ )
                   if ( Str1 [i - 1] == Str2 [j - 1] ) Opt [i] [j] = Opt [i - 1] [j - 1] + 1;
                      else Opt [i] [j] = max ( Opt [i - 1] [j] , Opt [i] [j - 1] );
           Work ( len1 , len2 );
           printf ( "\n" );
     }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?