我试图实现动态编程方法来查找两个序列之间的最长公共子序列。当被比较的两个字符串长度相同时,我的算法有效,但是当第二个字符串比第一个字符串长时,我的LCSLength()
函数不会返回正确的值。
这是带有返回错误值的测试用例的代码。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int LCSLength(string X,string Y);
int main()
{
string first ("HELLO");
string second ("HLOCKKE");
int LCS;
//ifstream inData;
//inData.open("test.dat");
//inData >> first >> second;
//inData.close();
LCS = LCSLength(first,second);
cout << "The LCS is: " << LCS << endl;
cout << first << endl;
cout << second << endl;
return 0;
}
int LCSLength(string X,string Y)
{
int m = X.size();
int n = Y.size();
int C[m][n];
for(int i=0; i<=m; i++)
{
for(int j=0; j<=n; j++)
C[i][j] = 0;
}
for(int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
{
if(X[i-1]==Y[j-1])
C[i][j]=C[i-1][j-1]+1;
else
C[i][j]=max(C[i][j-1],C[i-1][j]);
}
}
return C[m][n];
}
这应该打印“The LCS is: 3”,因为我的两个字符串之间的 LCS 是 3,但是,我的程序没有。我找不到我的错误。感谢您的帮助。