华为上机题:求N个字符串的最长公共子串,字符串长度不超过255。

用动态规划显然没有那么恐怖的内存……
只能枚举了

#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');
}
}


当时上机有三道题,这是第三道题,当时没做出来,后来上网查了一下,希望对大家有用

 

求N个字符串的最长公共子串,N<=20,字符串长度不超过255。    例如: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"。用C编程,在TC2.0下运行.

 

 

阅读更多
文章标签: 华为 编程 ini c
想对作者说点什么? 我来说一句

求N个字符串的最大公共子串

2012年09月16日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭