• hdu 1238 字符串处理 暴力


    Substrings

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

    http://acm.hdu.edu.cn/showproblem.php?pid=1238

    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
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int maxn=100+3;
    char str[maxn];
    string ansstr,ss;
    string str2[maxn];
    int t,n;
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(int i=0;i<n;i++){
                scanf("%s",str);
                str2[i]=str;
            }
            string temp=str2[0];
            int len=temp.size();
            int ans=0;
            for(int i=0;i<len;i++){
                for(int j=1;j+i<=len;j++){
                    int cnt=1;
                    ss=temp.substr(i,j);
                    for(int k=1;k<n;k++){
                        if(str2[k].find(ss)!=-1){
                            cnt++;
                        }
                    }
                    if(cnt==n){
                        if(ans<j){
                            ans=j;
                            ansstr=ss;
                        }else if(ans==j){
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            reverse(temp.begin(),temp.end());
            for(int i=0;i<len;i++){
                for(int j=1;j+i<=len;j++){
                    int cnt=1;
                    ss=temp.substr(i,j);
                    for(int k=1;k<n;k++){
                        if(str2[k].find(ss)!=-1){
                            cnt++;
                        }
                    }
                    if(cnt==n){
                        if(ans<j){
                            ans=j;
                            ansstr=ss;
                        }else if(ans==j){
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
    #include<stdio.h>//网上大佬的代码
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    using namespace std;
    
    const int maxn = 105;
    char str[maxn];
    string ansstr;
    string str2[maxn];
    
    int main()
    {
        int n,t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%s",str);
                str2[i]=str;
            }
            int ans=0;
            string tmp=str2[0];
            int tmplen=tmp.size();
            for(int i=0;i<tmplen;i++)
            {
                for(int j=1;i+j<=tmplen;j++)
                {
                    int cnt=1;
                    string ss=tmp.substr(i,j);
                    for(int k=1;k<n;k++)
                    {
                        if(str2[k].find(ss)!=-1)
                            cnt++;
                    }
                    if(cnt==n)
                    {
                        if(ans<j)
                        {
                            ans=j;
                            ansstr=ss;
                        }
                        else if(ans==j)
                        {
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            reverse(tmp.begin(),tmp.end());//reverse()会将区间[beg,end)内的元素全部逆序;
            for(int i=0;i<tmplen;i++)
            {
                for(int j=1;i+j<=tmplen;j++)
                {
                    int cnt=1;
                    string ss=tmp.substr(i,j);
                    for(int k=1;k<n;k++)
                    {
                        if(str2[k].find(ss)!=-1)
                            cnt++;
                    }
                    if(cnt==n)
                    {
                      //  cout<<ss<<" "<<cnt<<endl;
                        if(ans<j)
                        {
                            ans=j;
                            ansstr=ss;
                        }
                        else if(ans==j)
                        {
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    函数式接口(Functional Interface)
    解决maven install报错:java.lang.NoClassDefFoundError: org/codehaus/plexus/compiler/util/scan/InclusionScanException
    logstash收集系统日志配置
    logstash的安装,启动与输出
    elasticsearch安装head插件
    elasticsearch启动常见错误
    elasticsearch的window的安装和启动
    linux下搭建jenkins
    jenkins在搭建中常见的问题
    window下操作jenkins查看页面的几种方式
  • 原文地址:https://www.cnblogs.com/qqshiacm/p/11599482.html
Copyright © 2020-2023  润新知