zoukankan      html  css  js  c++  java
  • 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
    ",solve());
        }
        return 0;
    }
  • 相关阅读:
    php基本语法与安装
    面向对象编程 es5和es6的构造函数
    利用正则搜索替换
    正则特殊符号
    正则边界符 限定符
    面试官给我挖坑:rm删除文件之后,空间就被释放了吗?
    为什么 IPv6 难以取代 IPv4
    Docker系列教程04-Docker构建镜像的三种方式
    Docker系列教程03-Docker私有仓库搭建(registry)
    Linux-I/O模型详解
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5199413.html
Copyright © 2011-2022 走看看