#include<stdio.h>
#include<string>
int Max(int x, int y)
{
return x>y?x:y;
}
int find(const char *A,const char*B)
{
int i = 0;
int j = 0;
int Record[20][20] = {0};
int LenA = strlen(A);
int LenB = strlen(B);
int flag = 0;
for( j = 0; j < LenB; j++ )
{
if(A[0]==B[j]||flag==1)
{
Record[0][j]=1;
flag=1;
}
}
flag = 0;
for(i=1;i <LenA; i++)
{
if(B[0]==A[i]||flag==1)
{
Record[i][0] = 1;
flag = 1;
}
}
for ( i = 1; i < LenA; i++ )
for( j = 1; j < LenB; j++ )
{
if(B[j]==A[i])
Record[i][j] = Record[i-1][j-1] + 1;
else
{
Record[i][j] = Max(Record[i-1][j],Record[i][j-1]);
}
}
printf("%d\n",Record[LenA-1][LenB-1]);
return 0;
}
void main()
{
char A[20]={"INTHEBEGINING"};
char B[20]={"ALLTHINGSARELOST"};
int num = find(A,B);
}
算法思想:若当前A数组元素与B数组元素相同,则此时最大子序列为当前A,B各减 一元素时的最大子序列.若当前A,B元素不同,则取A减去一个元素与B的当前元素,以及B减去一个元素与A的当前元素中的大者。