最长公共子序列与编辑距离很相似,以下是代码
#include "stdafx.h"
#include<iostream>
using namespace std;
#define Max 100
int longestcomstr(char * str1,char * str2,int len1,int len2,int c[][Max],int b[][Max] )
{
for(int i=0;i<=len1;++i)
c[i][0]=0;
for(int i=0;i<=len2;++i)
c[0][i]=0;
for(int i=1;i<=len1;++i)
for(int j=1;j<=len2;++j)
{
if(str1[i]==str2[j])
{
c[i][j]=c[i-1][j-1]+1;
b[i][j]=0;
}else if(c[i-1][j]>c[i][j-1])
{
c[i][j]=c[i-1][j];
b[i][j]=1;
}else
{
c[i][j]=c[i][j-1];
b[i][j]=-1;
}
}
return c[len1][len2];
}
void printlcs(int b[][Max],char x[],int m,int n)
{
if(m==0||n==0)
return;
if(b[m][n]==0)
{
printlcs(b,x,m-1,n-1);
cout<<x[m-1];
}else if(b[m][n]==1)
{
printlcs(b,x,m-1,n);
}else if(b[m][n]==-1)
printlcs(b,x,m,n-1);
}
int _tmain(int argc, _TCHAR* argv[])
{
char x[8]="abcbdab";
char y[7]="bdcaba";
int c[Max][Max],b[Max][Max];
int a=longestcomstr(x,y,8,7,c,b);
cout<<a<<endl;
printlcs(b,x,8,7);
return 0;
}