最长公共子序列 记录子序列~

mac2022-06-30  27

#include < stdio.h > #include < string .h > char a[ 101 ],b[ 101 ],d[ 101 ]; int c[ 101 ][ 101 ]; int max( int x, int y) { if (x > y) return x; else return y;} int main(){ int lena,lenb,i,j,k,m; while (scanf( " %s%s " ,a + 1 ,b + 1 ) != EOF) { m = 0 ;memset(d, 0 , sizeof (d)); lena = strlen(a + 1 ); lenb = strlen(b + 1 ); for (i = 0 ;i <= lena;i ++ ) c[ 0 ][i] = 0 ; for (j = 0 ;j <= lenb;j ++ ) c[j][ 0 ] = 0 ; k = 0 ; for (i = 1 ;i <= lena;i ++ ) for (j = 1 ;j <= lenb;j ++ ){ if (a[i] == b[j]) { c[i][j] = c[i - 1 ][j - 1 ] + 1 ; if (c[i][j] > m) { d[k] = a[i]; k ++ ; }} else c[i][j] = max(c[i - 1 ][j],c[i][j - 1 ]); if (c[i][j] > m) m = c[i][j]; } printf( " %d\n " ,c[lena][lenb]); printf( " %s\n " ,d); } return 0 ;}

转载于:https://www.cnblogs.com/cyiner/archive/2011/05/16/2048203.html

最新回复(0)