#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[101][101];
char minStr[101];
int n;
char* strrev(char* x)
{
int i, n;
char tmp;
n = strlen(x);
for( i = 0 ; i < n/2 ; i++ )
{
tmp = x[i];
x[i] = x[n-i-1];
x[n-i-1] = tmp;
}
return x;
}
int maxSubStr()
{
char subStr[101],revSubStr[101];
int minLen, subStrLen;
int i, j;
minLen = strlen(minStr);
subStrLen = minLen;
while( subStrLen > 0 )
{
for( i = 0 ; i <= (minLen - subStrLen) ; i++ )
{
strncpy( subStr , minStr + i , subStrLen );
strncpy( revSubStr , minStr + i , subStrLen );
subStr[subStrLen] = revSubStr[subStrLen] = '\0';
strrev(revSubStr);//POJ不能用这个函数,自己写一个
for( j = 0 ; j < n ; j++ )
{
if( strstr(str[j],subStr)==NULL && strstr(str[j],revSubStr)==NULL )
break;
}
if( j==n ) return(subStrLen);
}
//如果该长度的子串no,继续寻找
subStrLen--;
}
}
int main(int argc, char *argv[])
{
int t, i, minLen;
scanf("%d",&t);
while(t--)
{
memset(str,0,sizeof(char)*101*101);
scanf("%d",&n);
minLen = 101 ;
for( i = 0 ; i < n ; i++ )
{
scanf("%s",str[i]);
//查找最短的字符串
if( strlen(str[i]) < minLen )
{
minLen = strlen(str[i]) ;
strcpy( minStr , str[i] );
}
}
printf("%d\n",maxSubStr());
}
system("PAUSE");
return 0;
}
4.4例题--子串--2744
最新推荐文章于 2022-05-31 13:29:30 发布