poj1226

来源:互联网 发布:openwrt怎么克隆mac 编辑:程序博客网 时间:2024/05/16 17:21
 
Substrings
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 7398 Accepted: 2473

Description

You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.

Input

The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.

Output

There should be one line per test case containing the length of the largest string found.

Sample Input

23ABCDBCDFFBRCD2roseorchid

Sample Output

22 
strcnpy:复制字符串的子串
strstr:在字符串中寻找子字符串

#include<stdio.h>#include<string.h>int t,n;char ch[109][109];void Strrev(char s[102]){    char s1[102];    int i,k;    strcpy(s1,s);    k=0;    for(i=strlen(s)-1;i>=0;i--)        s[k++]=s1[i];    s[k]=0;}

int searchmaxstring(char *source){ int a,b,i,j,flag; char str1[109],str2[109]; a=strlen(source);b=strlen(source); while(a>0) {  for(i=0;i<=b-a;i++)  {   strncpy(str1,source+i,a);   strncpy(str2,source+i,a);   str1[a]=str2[a]='\0';   Strrev(str2);   flag=0;   for(j=0;j<n;j++)   {    if(strstr(ch[j],str1)==NULL&&strstr(ch[j],str2)==NULL)    {     flag=1;     break;    }   }   if(flag==0)return a;  }  a--; } return 0;}int main(){ int i,m,s,l; char min[109]; scanf("%d",&t); while(t--) {  scanf("%d",&n);  m=100;  for(i=0;i<n;i++)  {   scanf("%s",ch[i]);   l=strlen(ch[i]);   if(l<m)   {    strcpy(min,ch[i]);    m=strlen(min);   }  }  s=searchmaxstring(min);  printf("%d\n",s); } return 0;}

原创粉丝点击