您的位置:首页 > 其它

个人模板 最长公共连续子序列

2017-05-05 22:42 337 查看
#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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: