比较简单的一题,思路就是开始先找到所有字符串中长度最短的那一个, 然后枚举出其所有子串, 并在枚举过程中判断子串是否符合条件……选取符合条件的最长的子串的长度输出
很多人说poj上数据弱, 但这个程序在poj上148ms, hdoj上0ms,不知为是么?
#include<stdio.h>
#include<string.h>
int main()
{
int t, n, i, j, k, min, len, pos, num;
char str[101][101], a[101], b[101];
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
for(i=0, min=999; i<n; i++)
{
scanf("%s", str[i]);
len=strlen(str[i]);
if( min>len )//取得最短字符串的位置和长度
{
min=len;
pos=i;
}
}
num=0;
for(i=1; i<=min; i++)//得到最短字符串的子串, 比较
{
for(j=0; j+i-1<min; j++)
{
for(k=0; k<i; k++)
{
a[k]=str[pos][j+k];//得到顺序子串
b[k]=str[pos][j+i-k-1];//得到子串反序
}
b[k]=a[k]='\0';
for(k=0; k<n; k++)
{
if(strstr(str[k], a)==NULL && strstr(str[k], b)==NULL)
break;
}
if( k>=n )
num=i;
}
}
printf("%d\n", num);
}
}