-
/*
-
key to LCS problem
-
bug1:当输入s1,s2长度不一致时,答案运行不出来
-
2020-1-22
-
*/
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string.h>
-
int main()
-
{
-
char s1[
100]={
0},s2[
100]={
0};
-
int x,y,max=
0;
-
printf(
"please input s1:");
-
gets(s1);
-
printf(
"please input s2:");
-
gets(s2);
-
printf(
"waiting.....\n");
-
x=
strlen(s1)+
1;
//col 列
-
y=
strlen(s2)+
1;
//line行
-
int **p=(
int**)
malloc(y*
sizeof(
int*));
-
for(
int i=
0;i<y;i++)
-
p[i]=(
int*)
malloc(x*
sizeof(
int));
-
for(
int i=
0;i<x;i++)
-
p[
0][i]=
0;
-
for(
int i=
0;i<y;i++)
-
p[i][
0]=
0;
-
for(
int i=
1;i<x;i++)
//x->s1
-
{
-
for(
int j=
1;j<y;j++)
//y->s2
-
{
-
if(s1[i
-1]==s2[j
-1])
-
p[i][j]=p[i
-1][j
-1]+
1;
-
else
-
p[i][j]=(p[i
-1][j]>p[i][j
-1])?p[i
-1][j]:p[i][j
-1];
-
max=(max>p[i][j])?max:p[i][j];
-
}
-
}
-
for(
int i=
0;i<y;i++)
-
free(p[i]);
-
free(p);
-
printf(
"the max length is: %d\n",max);
-
/*
-
improved version 滚动数组优化
-
*/
-
int** q=(
int**)
malloc(
sizeof(
int*)*
2);
-
int Max=
0;
-
for(
int i=
0;i<
2;i++)
-
q[i]=(
int*)
malloc(
sizeof(
int)*y);
-
for(
int i=
0;i<
2;i++)
-
q[i][
0]=
0;
-
for(
int i=
0;i<y;i++)
-
q[
0][i]=
0;
-
for(
int i=
1;i<x;i++)
-
{
-
for(
int j=
1;j<y;j++)
-
{
-
if(s1[i
-1]==s2[j
-1])
-
q[i%
2][j]=q[(i
-1)%
2][j
-1]+
1;
-
else
-
q[i%
2][j]=(q[(i
-1)%
2][j]>q[i%
2][j
-1])?q[(i
-1)%
2][j]:q[i%
2][j
-1];
-
Max=(Max>q[i%
2][j])?Max:q[i%
2][j];
-
}
-
}
-
for(
int i=
0;i<
2;i++)
-
free(q[i]);
-
free(q);
-
printf(
"the Max length is: %d\n",Max);
-
return
0;
-
}
转载:https://blog.csdn.net/Blackvisitor/article/details/113002077
查看评论