题目链接:http://poj.org/problem?id=1226
如果真做的话用后缀数组还是费点事的,不过题目数据量不大,直接枚举+strstr水过!
#include <string.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 1000
char str[500][maxn],tem[maxn],tem1[maxn],tem2[maxn];
int n;
int rev(char *name,int len){
int l=0;
len--;
while(l<len){
name[l]^=name[len];
name[len]^=name[l];
name[l]^=name[len];
l++,len--;
}
return 0;
}
int main(){
int i,j,k,t,len,ans;
char ch;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
k=maxn;j=0;
for(i=0;i<n;i++){
scanf("%s",str[i]);
len=strlen(str[i]);
if(len<k) k=len,j=i;
}
strcpy(tem,str[j]);
len=strlen(tem);
ans=0;
for(i=0;i<len;i++)
for(j=i+1;j<=len;j++){
if(j-i<=ans) continue;
ch=tem[j];tem[j]=0;
strcpy(tem1,tem+i);
tem[j]=ch;
strcpy(tem2,tem1);
rev(tem2,j-i);
for(k=0;k<n;k++){
if(strstr(str[k],tem1) || strstr(str[k],tem2))
continue;
break;
}
if(k==n) ans=j-i;
}
printf("%d\n",ans);
}
return 0;
}