注意:
.函数strrev()在gcc不能通过,这点要注意,可以写个函数代替之。
-
时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
- 现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。 输入
- 输入的第一行是一个整数t (1 <= t <= 10),t表示测试数据的数目。对于每一组测试数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n个字符串。接下来n行,每行给出一个长度在1和100之间的字符串。 输出
- 对于每一组测试数据,输出一行,给出题目中要求的字符串x的长度。 样例输入
-
2 3 ABCD BCDFF BRCD 2 rose orchid
样例输出
-
2 2
#include<stdio.h>
#include<string.h>
char string[100][101];
void strrev(char *s){
len=strlen(s);
char revs[len];
for(i=0,j=len-1;j>=0;i++,j--){
revs[i]=s[j];
}
strcpy(s,revs);
};
int main(){
int t,n,m,i,j,k,minlen,len,flag,mins;
char minstr[101];
char revstr[101];
scanf("%d",&t);
while(t--){
scanf("%d",&n);
minlen=110;
for(m=0;m<n;m++){
scanf("%s",string[m]);
len=strlen(string[m]);
if(len<minlen){
minlen=len;
mins=m;
}
}
for(i=minlen;i>=1;i--){
for(j=0;j<=minlen-i;j++){
strncpy(minstr,string[mins]+j,i);
minstr[i]='\0';
strcpy(revstr,minstr);
strrev(revstr);
revstr[i]='\0';
flag=1;
for(k=0;k<n;k++){
if(strstr(string[k],minstr)==NULL&&strstr(string[k],revstr)==NULL){
flag=0;
break;
}
}
if(flag==1)
goto OUTPUT;
}
}
OUTPUT:
printf("%d\n",i);
}
return 0;
}