#include<iostream>
#include<cstring>
const int maxnum = 100;
int c[maxnum][maxnum];
char s1[maxnum];
char s2[maxnum];
int len1, len2;
using namespace std;
void LCSL()
{
for (int i = 1; i <= len1; i++)
{
for (int j = 1; j <= len2; j++)
{
if (s1[i-1] == s2[j-1])
c[i][j] = c[i - 1][j - 1] + 1;
else
{
if (c[i - 1][j] < c[i][j - 1])
{
c[i][j] = c[i][j - 1];
}
else
{
c[i][j] = c[i - 1][j];
}
}
}
}
}
//i,j的存在主要是为了递归,刚开始肯定等于最后一个值len1,len2
void Print(int i, int j)
{
if (i == 0 || j == 0) return;
//b[i][j] = 1
if (c[i - 1][j] < c[i][j] && c[i][j - 1] < c[i][j])
{
Print(i - 1, j - 1);
cout << s1[i - 1];
}
else
{
//b[i][j] = 2
if (c[i - 1][j] < c[i][j - 1])
{
Print(i, j - 1);
}
else {
Print(i - 1, j);
}
}
}
int main() {
cin >> s1;
cin >> s2;
len1 = strlen(s1);
len2 = strlen(s2);
//初始化
for (int i = 0; i < len2; i++)
{
c[0][i] = 0;
}
for (int i = 0; i < len1; i++)
{
c[i][0] = 0;
}
LCSL();
cout << "最长长度为:" << c[len1][len2] << endl;
Print(len1,len2);
return 0;
}
ABCBADB
BCBAAC
长度:4,
BCBA