string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define N 101
#define LL long long
using namespace std;
string str[N];
int main() {
int t;
scanf("%d",&t);
while(t--) {
int m;
scanf("%d",&m);
for(int i=1; i<=m; i++)
cin>>str[i];
string res="no significant commonalities";
for(int len=3; len<=60; len++) {//枚举长度
for(int i=0; i<=60-len; i++) { //枚举初始位置
string temp=str[1].substr(i,len);//构造子串
bool flag=true;
for(int j=2; j<=m; j++) {//枚举剩下的m-1个字符串
//判断是否存在子串,如果没有找到
if(str[j].find(temp)==string::npos) {
//标记没有找到
flag=false;
break;
}
}
//如果没有找到,继续往下找
if(!flag)
continue;
else {
if(res=="no significant commonalities")
res=temp;
else if(res.size()<temp.size())
res=temp;
else if(res.size()==temp.size())
res=min(res,temp);
}
}
}
cout<<res<<endl;
}
return 0;
}