poj 1226 Substrings

来源:互联网 发布:c语言书籍推荐 编辑:程序博客网 时间:2024/06/07 15:54

  题意很简单,但是我仍然读错了。给定n个串,求一个最大子串长度,使得它或者它的逆向串在每个串中出现。这个子串是连续的(非常重要,如果不连续的话这题就大大的升级了)。

简单题,把strstr函数和strncpy用好就行。

#include<stdio.h>#include<string.h>#define N 101#define INF 0x3f3f3f3fchar str[101][101],arr[N],res[N],pos[N];int main(void){    int n,ncase,len,k;    scanf("%d",&ncase);    while(ncase--)    {     len = INF;     k = 0;     scanf("%d",&n);     for(int i=1;i<=n;++i)     {      scanf("%s",str[i]);      int len1=strlen(str[i]);      if(len>len1)      {          len = len1;          k = i;      }     }     strcpy(arr,str[k]);     int flag = 0;     for(int i=len;i>=1;--i)     {      for(int j=0;j<=len-i;++j)      {          strncpy(pos,arr+j,i);          pos[i]='\0';          for(int f=0;f<i;++f)            res[f]=pos[i-f-1];          res[i]='\0';          int k;          for(k=1;k<=n;++k)          {              if(strstr(str[k],pos)==NULL&&strstr(str[k],res)==NULL)                break;          }          if(k>n)          {              flag=i;              break;          }      }      if(flag)        break;      }      printf("%d\n",flag);    }    return 0;}