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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值