[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;
}