hdu 1238 Substrings(字符串查找问题 c语言版 0ms)
时间:2011-04-16 来源:银志圆
/*
搜索入门题
对字符串按长度进行排序
然后对最短的字符串枚举所有的子串
用到了 求反串 求子串 字符串查找
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char str[120];
}In;
In s[120];
int cmp ( const void *a , const void *b )
{
return strlen((*(In*)a).str)-strlen((*(In *)b).str);
}
int t,n;
void print()
{
int i;
for(i=0;i<n;i++)
printf("%s\n",s[i].str);
}
int process(In a)
{
int len=strlen(a.str);
char tmp[150];
char rtmp[150];
int i,j,k,q,p;
for(i=len;i>=1;i--)
{
memset(tmp,0,sizeof(tmp));
memset(rtmp,0,sizeof(rtmp));
for(j=0;j+i<=len;j++)
{
memcpy(tmp,a.str+j,i);
for(k=i-1,p=0;k>=0;k--,p++)
{
rtmp[p]=tmp[k];
}
int ok=1;
for(q=1;q<n;q++)
{
if(strstr(s[q].str,tmp)!=NULL)
continue;
if(strstr(s[q].str,rtmp)!=NULL)
continue;
ok=0;
break;
}
if(ok)return strlen(tmp);
}
}
return 0;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%s",&s[i].str);
}
qsort((void*)s,n,sizeof(s[0]),cmp);
int ans=process(s[0]);
printf("%d\n",ans);
}
return 0;
}
相关阅读 更多 +