Substrings

 Substrings
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit  Status

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<stdio.h> #include<string.h> #include<stdlib.h> #define maxn 120 char str[maxn][maxn]; char source[maxn]; int n; void Input() { int i, len = 1000; scanf("%d", &n); source[0] = '\0'; for(i = 0; i < n; i++) { scanf("%s", str[i]); int lens = strlen(str[i]); if(len > lens) { strcpy(source, str[i]); len = lens; } } } int Find(char substrs[], char revsubstr[]) { for(int i = 0; i < n; i++) { if(strstr(str[i], substrs) == 0 && strstr(str[i], revsubstr) == 0) return 0; } return 1; } int substring() { int i, j, len = strlen(source); for(i = len; i > 0; i--) for(j = 0; j + i <= len; j++) { char substrs[maxn] = {0}, revsubstr[maxn]; strncpy(substrs, source+j, i); strcpy(revsubstr, substrs); strrev(revsubstr); if(Find(substrs, revsubstr)) return i; } return 0; } int main() { int t; scanf("%d", &t); while(t--) { Input(); printf("%d\n", substring()); } return 0; }

你可能感兴趣的:(substring)