POJ1226(strstr)

Substrings
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 13348   Accepted: 4722

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<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[105][105];
int n;
int solve()
{
    char sub[105];
    char rsub[105];
    int len=strlen(s[0]);
    int cnt=0;
    for(int l=len;l>0;l--)
    {
        for(int x=0;x+l<=len;x++)
        {
            memset(sub,0,sizeof(sub));
            memset(rsub,0,sizeof(rsub));
            strncpy(sub,s[0]+x,l);
            strcpy(rsub,sub);
            reverse(rsub,rsub+strlen(rsub));
            cnt=0;
            for(int i=1;i<n;i++)
            {
                if(strstr(s[i],sub)!=NULL||strstr(s[i],rsub)!=NULL)
                {
                    cnt++;
                }
                else    break;
            }
            if(cnt==n-1)    return strlen(sub);
        }
    }    
    return 0;
}
int main()
{
    int cas;
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d",&n);
        memset(s,0,sizeof(s));
        for(int i=0;i<n;i++)
        {
            scanf("%s",s[i]);
        }
        printf("%d\n",solve());
    }
    return 0;
}

 

posted on 2016-02-18 21:57  vCoders  阅读(219)  评论(0编辑  收藏  举报

导航