#include<iostream>
using namespace std;
int record[ 100 ][ 100 ];
int dp[ 100 ][ 100 ];
char str1[ 100 ];
char str2[ 100 ];
void lcs( ) {
memset( record , 0 , sizeof( record ) );
if( ( str2 == NULL ) && ( str1 == NULL ) ) {
return;
}
int len1 = strlen( str1 + 1 );
int len2 = strlen( str2 + 1 );
int i;
int j;
for( i = 0 ; i <= len1 ; i ++ ) {
dp[ i ][ 0 ] = 0;
}
for( i = 0 ; i <= len2 ; i ++ ) {
dp[ 0 ][ i ] = 0;
}
for( i = 1 ; i <= len1 ; i ++ ) {
for( j = 1 ; j <= len2 ; j ++ ) {
if( str1[ i ] == str2[ j ] ) {
dp[ i ][ j ] = dp[ i - 1 ][ j - 1 ] + 1;
record[ i ][ j ] = 1;
}
else {
dp[ i ][ j ] = dp[ i - 1 ][ j ];
record[ i ][ j ] = 2;
if( dp[ i ][ j - 1 ] > dp[ i ][ j ] ) {
dp[ i ][ j ] = dp[ i ][ j - 1 ];
record[ i ][ j ] = 3;
}
}
}
}
}
void print( int i , int j ){
while( record[ i ][ j ] != 0 ) {
if( record[ i ][ j ] == 1 ) {
cout << str1[ i ];
i --;
j --;
}
else if( record[ i ][ j ] == 2 ) {
i --;
}
else if( record[ i ][ j ] == 3 ){
j --;
}
}
}
int main() {
cin >> str1 + 1;
cin >> str2 + 1;
lcs( );
print( strlen( str1 + 1 ) , strlen( str2 + 1 ) );
}
lcs
最新推荐文章于 2021-06-20 10:19:08 发布