[POJ3080]Blue Jeans 【String】

[POJ3080]Blue Jeans

【题目大意】

给你M个字符串,每个字符串长度为60,让你选出最长且字典序最小的一段,始这个子串是这M个字符串的子串,如果最长子串长度<3,输出“no significant commonalities”,否则输出这个子串。

【题解】

其实没啥好写,就是,字符组串的运用,其实不需要KMP,时间63MS。

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 60
using namespace std;
int T,n;
string ch[15],ans;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);ans="";
        for(int i=1;i<=n;i++) cin>>ch[i];
        bool tt=0;
        for(int L=M;L>=3;L--){
            for(int i=0;i<=M-L;i++){
                string now=ch[1].substr(i,L);
                bool t=1;
                for(int j=2;j<=n;j++) if(ch[j].find(now)==string::npos) t=0;
                if(!t) continue;
                if(ans==""||ans>now) ans=now;
            }
            if(ans!="") break;
        }
        if(ans=="") printf("no significant commonalities\n");
        else cout<<ans<<endl;
    }
    return 0;
}
posted @ 2018-03-09 11:02  XSamsara  阅读(112)  评论(0编辑  收藏  举报