暑假了 , 贴贴很久前的代码,今年暑假要AC。 #include <iostream> #include <string> using namespace std; void Reverse(char str[],int n) { int l; char temp; for(l=0;l<n/2;l++) { temp=str[l]; str[l]=str[n-l-1]; str[n-l-1]=temp; } } int main() { int i,j,k,t,min,num,N,M; char a[110][110]; char str[100],same[100]; scanf("%d",&N); while(N--) { scanf("%d",&M); min=101; for(i=1;i<=M;i++) //找出最短字符串 min为长度 num为序号 { scanf("%s",&a[i]); j=strlen(a[i]); if(j<min) { min=j; num=i; } } strcpy(str,a[num]); for(i=min;i>=1;i--) //从长到短 { t=min-i+1; for(j=0;j<t;j++) //相同长度从前到后 { strncpy(same,str+j,i); same[i]='/0'; for(k=1;k<=M;k++) { if(strstr(a[k],same)!=NULL) continue; Reverse(same,i); if(strstr(a[k],same)!=NULL) continue; else break; } if(k==(M+1)) break; } if(k==(M+1)) break; } printf("%d/n",i); // printf("%s/n",same); } return 0; }