Substrings

Problem 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 file 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

2
3
ABCD
BCDFF
BRCD
2
rose
orchid

Sample Output

2
2
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string lmx[200];
int main()
{
 int t,n,i,j,min,k,flag,x;
 cin>>t;
 while(t--)
 {
  cin>>n;
  min=200;
  flag=0;
        for(i=0;i<n;i++)
  {
   cin>>lmx[i];
   if(lmx[i].length()<min)  {min=lmx[i].length();flag=i;}
  }
  int x=0;
  for(i=min;i>0;i--)
  {
              for(k=0;k+i<=min;k++)
     {
      string s1,s2;
      s1=lmx[flag].substr(k,i);
      s2=s1;
      reverse(s1.begin(),s1.end());
                   for(j=0;j<n;j++)
       {
                       if(lmx[j].find(s1)==-1&&lmx[j].find(s2)==-1)  break;
       }
       if(j==n)  {cout<<s1.length()<<endl;flag=1;break;}
     }
     if(flag==1) break;
  }
  if(flag==0)  cout<<0<<endl;
 }
 return 0;
}
posted @ 2012-12-13 23:01  forevermemory  阅读(177)  评论(0编辑  收藏  举报