#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
char s1[10001];
char s2[10001];
int dp[10001][10001];/*dp[i][j]表示s1串左边i个字符和s2串左边j个字符
形成的最长公共子序列的长度
*/
/*动态转移方程 dp[i][j]=(s1[i-1]==s2[j-1])?(dp[i-1][j-1]+1):(max(dp[i-1][j],dp[i][j-1]))
*/
int main()
{
cin>>s1>>s2;
int length1=strlen(s1);
int length2=strlen(s2);
for(int i=1;i<=length1;i++)
{
for(int j=1;j<=length2;j++)
{
if(s1[i-1]==s2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j], dp[i][j-1]);
}
}
cout<<dp[length1][length2]<<endl;
//system("pause");
}
12-29
04-12