首先,有俩参数分别是s1,s2,那就要用二维数组.
确定状态maxlen(i,j),表示s1第i个与s2第j个元素组成的最长公共子序列个数
再找临界状态:maxlen(i,0)=0,maxlen(0,j)=0
再找状态转移方程:
如果s1第i-1个元素和s2第i-1个元素相等,那么maxlen(i,j)=maxlen(i-1,j-1)+1
如果s1第i-1个元素和s2第i-1个元素不相等那么maxlen(i,j)=max(maxlen(i,j-1)+maxlen(i-1,j))
最后输出maxlen(len1,len2)就可以了
#include<iostream>
#include<cstring>
using namespace std;
char sz1[1000] ;
char sz2[1000];
int maxlen[1000][1000];
int main(){while(cin>>sz1>>sz2){int length1= strlen( sz1);int length2= strlen( sz2);int ntmp;int i,j;for(i =0;i <= length1;++i) maxlen[i][0]=0;for(j=0;j<=length2;++j)maxlen[0][j]=0;for(i=1;i<=length1;i++){for(j=1;j<=length2;j++){if(sz1[i-1]==sz2[j-1])maxlen[i][j]=maxlen[i-1][j-1]+1;else maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1]);} }cout<<maxlen[length1][length2]<<endl;}return 0;
}