最长公共子串LCS【C语言】
求顺序串S和顺序串T的一个最长公共子串。
#include <stdio.h>
#include <stdlib.h>
#define size 100
typedef struct
{
char ch[size];
int len;
}Seqstring;
void Create(Seqstring *S)
{
int i;
for(i=0;i<S->len;i++)
{
scanf(" %c",&S->ch[i]);
}
}
void view(Seqstring s)
{
printf("该串为:\n");
int i;
for(i=0;i<s.len;i++)
{
printf("%c",s.ch[i]);
}
printf("\n");
}
int max(int a,int b)
{
return a>b?a:b;
}
int LCS(Seqstring *s1,int n,Seqstring *s2,int m)
{
if(n==0 || m==0)
{
return 0;
}
else if(s1->ch[n-1]==s2->ch[n-1])
{
return LCS(s1,n-1,s2,m-1)+1;
}
else
{
return max(LCS(s1,n,s2,m-1),LCS(s1,n-1,s2,m));
}
}
int main()
{
Seqstring S;
printf("请您输入--串S的长度:\n");
int num;
scanf("%d",&num);
S.len=num;
printf("请您输入--串S:\n");
Create(&S);
view(S);
Seqstring T;
printf("请您输入--串T的长度:\n");
scanf("%d",&num);
T.len=num;
printf("请您输入--串T:\n");
Create(&T);
view(T);
int lcs=LCS(&S,S.len,&T,T.len);
printf("串S与串T的最长公共子串为:\n%d\n",lcs);
return 0;
}
请您输入--串S的长度:
5
请您输入--串S:
abcde
该串为:
abcde
请您输入--串T的长度:
5
请您输入--串T:
xbcds
该串为:
xbcds
串S与串T的最长公共子串为:
3
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved. |
---|