新问题:下标的问题,字符串的下标是从0开始的,使用dp的下标是从1对应的是字符串的0。
还是原来的sb问题,输入使用scanf前面两个%s后面只有一个s1没有了s2。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
char s1[105],s2[105];
int dp[105][105];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
//两个字符串之间无论是空格还是回车都不用自己打出来的!
//没关系
while(scanf("%s%s",&s1,&s2)!=EOF)
{
int l1=strlen(s1);
int l2=strlen(s2);
for(int i=0;i<=l1;i++)dp[i][0]=0;
for(int i=0;i<=l2;i++)dp[0][i]=0;
for(int i=1;i<=l1;i++)
{
for(int j=1;j<=l2;j++)
{
//这里有一个特别坑人的地方:
//dp[i][j]对应的,s1的第i个 ,但是s1 的第i个的下标为i-1
if(s1[i-1]==s2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
cout<<s1[i]<<endl;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
printf("%d\n",dp[l1][l2]);
}
return 0;
}