描述
现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串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<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int N;
char str[110][110],substr[110],rsubstr[110];
int main(){
int n,i,j;
int l,minl,mini;
int cnt,len;
scanf("%d",&N);
for(i = 0;i < N;++i){
scanf("%d",&n);
minl = 110;
for(j = 0;j < n; ++j){//找最小子串
scanf("%s",str[j]);
l = strlen(str[j]);
if(l < minl){
mini = j;
minl = l;
}
}
for(len = minl;len > 0; --len){
for(j = minl - len;j >= 0; --j){
strncpy(substr,str[mini] + j,len);
substr[len] = '\0';
for(int k = len - 1;k >= 0; --k){//G++中没有strrev
rsubstr[len - 1 - k] = substr[k];
}
rsubstr[len] = '\0';
cnt = 0;
for(int k = 0;k < n; ++k){//模式匹配
if(strstr(str[k],substr) || strstr(str[k],rsubstr)){
++cnt;
continue;
}
else
break;
}
if(cnt == n)
break;
}
if(cnt == n)
break;
}
printf("%d\n",len);
}
return 0;
}
错误:
Compile Error
G++中没有strrev
没啥思路,库函数不会用:strstr, strncpy