题目描述
现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串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 <string>
#include <algorithm>
using namespace std;
void _4202_()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
string str[110];
for (int i = 0;i < n;i++)
{
cin >> str[i];
}
for (int i = str[0].size();i > 0;i--)//取多少位
{
string sub;
int flag = 0;
for (int j = 0;j < str[0].size();j++)//从第几个开始
{
//abcdefg
if (j + i <= str[0].size())
sub = str[0].substr(j, i);
else break;
int count = 0;
string re = sub;
reverse(re.begin(), re.end());
flag = 0;
//正序
for (int k = 1;k < n;k++)//一个一个比较 如果全部都find到了 就count = i; 只要有一个没find到 就break
{
if (str[k].find(sub) == -1 && str[k].find(re) == -1)//没find到
{
flag = 1;
break;
}
}
if (!flag)//全部都find到了
{
count = i;
cout << count << endl;
break;
}
}
if (!flag)break;
}
}
}
int main()
{
_4202_test();
return 0;
}