string中自带的find(cosnt char *)可完成字符串匹配,该题目的是练习string的使用。字符串长度较小,暴力即可。
#include<iostream> #include<cstdio> #include<string> using namespace std; const int SIZE=102; int main() { int T; cin>>T; while(T--) { string a[SIZE]; int n; cin>>n; int len=105; int k; for(int i=0;i<n;i++) { cin>>a[i]; if(a[i].length()<len) { len=a[i].length();//记录长度最短的字符串 k=i; } } char s[SIZE]={‘\0‘}; char res[SIZE]={‘\0‘}; char out[SIZE]={‘\0‘}; int maxn=-1; for(int i=0;i<len;i++) { for(int j=i;j<len;j++) { memset(s,‘\0‘,sizeof(s)); memset(res,‘\0‘,sizeof(res)); for(int l=i;l<=j;l++) { s[l-i]=a[k][l]; res[j-l]=a[k][l]; } int cnt=0; for(int l=0;l<n;l++) { if(a[l].find(s)!=-1||a[l].find(res)!=-1) //若匹配成功则返回下标位置 { //否则返回-1; cnt++; } } if(cnt==n) //若所有字符串均匹配成功则更新答案 { if(j-i+1>maxn) { maxn=j-i+1; out[0]=‘\0‘; maxn=strlen(s); strcpy(out,s); } } } } if(maxn>-1) cout<<maxn<<endl; else cout<<0<<endl; } return 0; }
时间: 2024-10-28 10:54:36