例如:N=3,由键盘依次输入三个字符串为
What is local bus ?
Name some local buses.
local bus is a high speed I/O bus close to the processer.
则最长为"local bus"。
在TC2.0下运行.
----------------解决方案--------------------------------------------------------
怎么没人回呀?是不是没人会呢?
----------------解决方案--------------------------------------------------------
这问题比较麻烦,要先比较出三个串里共同拥有的子串,算法比较麻烦,自己去看看KMP算法,懂了就会了,我现在都还在研究,好难懂。
----------------解决方案--------------------------------------------------------
哦,那我先去看一下呀,不过我有可能看不懂哟!
不知有没有人会?
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <string.h>
#define MAXN 20
#define MAXL 256
int n;
int len[MAXN];
char str[MAXN][MAXL];
int match(char *s1,char *s2,int len)
{
while (len--)
{
if (*s1!=*s2) return 0;
s1++;
s2++;
}
return 1;
}
main()
{
int i,j;
int ans,ansi;
char line[100];
scanf("%d",&n);
gets(line);
for (i=0;i<n;i++)
{
gets(str[i]);
len[i]=strlen(str[i]);
}
ans=-1;
for (j=len[0];ans==-1 && j>0;j--)
for (i=0;ans==-1 && i+j-1<len[0];i++)
{
int flag1,k;
flag1=1;
for (k=1;flag1 && k<n;k++)
{
int flag2,s;
flag2=0;
for (s=0;!flag2 && s+j-1<len[k];s++)
if (match(str[0]+i,str[k]+s,j)) flag2=1;
if (!flag2) flag1=0;
}
if (flag1)
{
ans=j;
ansi=i;
}
}
if (ans==-1) puts("No common substrings!");
else
{
for (i=0;i<ans;i++) putchar(str[0][i+ansi]);
putchar('\n');
}
}
这个应该对吧!用的好好像是枚举法.
----------------解决方案--------------------------------------------------------