读书人

请教个 最长公共子序列 有关问题

发布时间: 2012-03-18 13:55:39 作者: rapoo

请问个 最长公共子序列 问题
#include <iostream>
using namespace std;
int Max(int x,int y)
{
return x>y ? x : y ;
}
void maxLen(char* X,char* Y,int I,int J)
{
int** M=new int*[I];
int Len=0;
int i,j;
for(int num=0;num<I;num++)
M[num] = new int[J];

for(int i=0;i<I;i++)
M[i][0]=0;

for(int j=0;j<J;j++)
M[0][j]=0;

for(i=1;i<I;i++)
for(j=1;j<J;j++)
{
if(X[i]=Y[j])
M[i][j]=M[i-1][j-1]+1;
else
M[i][j]=Max(M[i-1][j],M[i][j-1]);
}

cout << M[I-1][J-1] << endl;

for(int num=0;num<I;num++)
delete []M[num];
delete[]M;
M=0;
}
int main()
{
char X[7]={'A','B','C','B','D','A','B'};
char Y[7]={'B','D','C','A','B','A'};
maxLen(X,Y,7,6);
/*int *m;
m=new int[3];
for (int i=0;i<3;i++)
{m[i]=i;cout << m[i];}
*/
//cout << Max(3,4);
return 0;
}


结果等于5是什么意思??

[解决办法]
好像是找两个数组中有多少相同的字母?
[解决办法]
char X[7]={'A','B','C','B','D','A','B'};
char Y[7]={'B','D','C','A','B','A'};
子序列的定义是:某个串去掉若干个字符后剩余的字符串(可以不连续)

最长公共子序列就是两个串都有的的最长 的子序列。

这样来看,最长应该是4

你的代码中有一个明显的错误:if(X[i]=Y[j])

这个应该是if(X[i] == Y[j])

读书人网 >软件架构设计

热点推荐