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
2 3 ABCD BCDFF BRCD 2 rose orchid
Sample Output
2 2
#include#include #include using namespace std; const int INF = 0x3f3f3f3f; string str[110]; int main() { int kase,n; int minl=INF; int minpos; cin >> kase; while(kase--) { minl = INF; cin >> n; for(int i = 0; i < n; i++) { cin >> str[i]; if(str[i].length() < minl) { minl = str[i].length(); minpos = i; } } string key = str[minpos]; string tem, rev; for(int i = minl; i >= 1; i--) //取字符串長度 { for(int j = 0; j + i -1 < minl; j++) { tem = string( key.begin() + j, key.begin() + j + i ); rev = string( tem.rbegin(), tem.rend() ); bool flag = true; for(int k = 0; k < n; k++) { if(str[k].find( tem ) == string::npos && str[k].find( rev ) == string::npos) { flag = false; break; } } if(flag) { printf( "%d\n", i ); goto here; } } } printf( "0\n" ); here:; } return 0; }