#include <iostream>
using namespace std;
int dp[30][30];
int maxlen; /* 记录最大公共子串长度 */
int maxindex; /* 记录最大公共子串在串1的起始位置 */
void LCS(char * X, int xlen, char * Y, int ylen)
{
maxlen = maxindex = 0;
for(int i = 0; i < xlen; ++i)
{
for(int j = 0; j < ylen; ++j)
{
if(X[i] == Y[j])
{
if(i && j)
{
dp[i][j] = dp[i-1][j-1] + 1;
}
if(i == 0 || j == 0)
{
dp[i][j] = 1;
}
if(dp[i][j] > maxlen)
{
maxlen = dp[i][j];
maxindex = i + 1 - maxlen;
}
}
}
}
for (int i = 0; i < maxlen; i++)
{
printf("%c", X[maxindex+i]);
}
printf("\n");
}
int main()
{
char X[] = "aaaba";
char Y[] = "abaa";
LCS(X,strlen(X),Y,strlen(Y));
return 0;
}
最长公共子串(Longest Common Substring)
最新推荐文章于 2021-03-11 14:24:37 发布