Common Subsequence:
#include<iostream>
#include<cstring>
using namespace std;
#define M 1000
#define N 1000
int c[M][N];
int lcs_len(char *a,char *b)
{
int m=strlen(a),n=strlen(b),i,j;
for(i=0;i<=m;++i)
for(j=0;j<=n;++j)
c[i][j]=0;
for(i=0;i<=m;i++)
c[i][0]=0;
for(j=0;j<=n;j++)
c[0][j]=0;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(a[i-1]==b[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-1][j];
else
c[i][j]=c[i][j-1];
}
}
int maxnum=-32768;
for(i=0;i<=m;++i)
for(j=0;j<=n;++j)
if(c[i][j]>maxnum)
maxnum=c[i][j];
return maxnum;
}
int main(){
char a[M],b[M];
while(cin>>a>>b)
cout<<lcs_len(a,b)<<endl;
return 0;
}本文出自 “菜鳥的進階之路” 博客,請務必保留此出處http://beyond316.blog.51cto.com/7367775/1272550