#include<bits/stdc++.h>
using namespace std;
void getLCS(char* str1, char* str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int matrix[len1]; //str1为x方向
//初始化matrix
for (int i = 0; i < len1; i++)
{
matrix[i] = 0;
}
int maxValue;//str2为y方向,最多有len2个最大值
int maxIndex;
//初始化maxValue和maxIndex
maxValue = -1;
maxIndex = -1;
for (int i = 0; i < len2; i++)
{
for (int j = len1 - 1; j >= 0; j--)
{
//扫描str1与str2的各个字符的匹配情况
if (str2[i] == str1[j])
{
if (j == 0)
{
matrix[j] = 1;
}
else
{
matrix[j] = matrix[j - 1] + 1;
}
}
else
{
matrix[j] = 0;
}
if (matrix[j] != 0 && matrix[j] > maxValue)
{
//更新maxValue的值
maxValue = matrix[j];
maxIndex = j;
}
}
}
for(int i = maxIndex - maxValue +1; i < maxIndex + 1; i++)
{
printf("%c",str1[i]);
}
printf("\n");
}
int main()
{
int n;
char a[101],b[101];
while(scanf("%d",&n)==1)
{
for(int i=0; i<n; i++)
{
scanf("%s%s",a,b);
getLCS(a,b);
}
}
}
个人模板 最长公共连续子序列
最新推荐文章于 2022-06-05 08:58:34 发布