#include
#include
#include
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t --){
cin>>n;
int minsize = 101,min,len,i,j;
string s[101];
for(int i = 0;i < n;i ++){
cin>>s[i];
if(s[i].size() < minsize){minsize = s[i].size();min = i;} //选最短字符串,从中取子串进行暴搜
}
for(len = minsize;len > 0;len --){ //从长取到短
for(i = 0;i + len <= minsize;i ++){
string subs = s[min].substr(i,len); //子串
char tmp[101];
strcpy(tmp,subs.c_str());
string subr = _strrev(tmp); //逆子串
for(j = 0;j < n;j ++)
if(s[j].find(subs) == string::npos && s[j].find(subr) == string::npos)break;
if(j == n){cout<
}
}
cout<<"0\n";
next:continue;
}
return 0;
}
这题开始没想到一个字母也算子串,白wa了一次 = =
网上的解题报告貌似有用kmp算法搜索和后缀数组的。喵的都没听过。可以好好看下- -!
用string类水过的题,不靠谱。。。。
没有评论:
发表评论