poj 1226, hdoj1238, zoj 1374 Substrings

                 比较简单的一题,思路就是开始先找到所有字符串中长度最短的那一个, 然后枚举出其所有子串, 并在枚举过程中判断子串是否符合条件……选取符合条件的最长的子串的长度输出

                   很多人说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);
    }	
}


你可能感兴趣的:(poj 1226, hdoj1238, zoj 1374 Substrings)