HDU1238 Substrings

                                                           Substrings

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6032    Accepted Submission(s): 2666


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
 

Author
Asia 2002, Tehran (Iran), Preliminary
 

Recommend
Eddy

STL很强大啊!


//#include"StdAfx.h" #include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; int main() {     int t,n,i,j,k;     cin>>t;     while(t--)     {         cin>>n;         string *a=new string[n];         string *b=new string[n];         int minLength =150;         int minIndex;         for(i=0;i<n;i++)         {             cin>>a[i];             b[i]=a[i];             reverse(b[i].begin(),b[i].end());             if(minLength>a[i].length())             {                 minLength=a[i].length();                 minIndex=i;             }         }         string subString;         bool fail;         int maxLength=0;         for(i=0;i<minLength;i++)             for(j=1;j<=minLength-i;j++)             {                 fail=0;                 subString=a[minIndex].substr(i,j);                 for(k=0;k<n;k++)                 {                     if(a[k].find(subString)!=-1&&k==n-1)                     {                         maxLength=max(maxLength,j);                     }                     if(a[k].find(subString)==-1)                     {                         if(b[k].find(subString)==-1)                         {                             fail=1;                             break;                         }                         else if(k==n-1)                             maxLength=max(maxLength,j);                     }                 }                 if(fail==1)                     break;             }         delete []a;         delete []b;         cout<<maxLength<<endl;     }     return 0; } 


你可能感兴趣的:(HDU1238 Substrings)