题目大意:
给你n个字符串,然后要求求一个最大的子串(或者子串的反串,子串可以倒过来的意思)在每个字符串中都出现。要求求这个子串的长度。
解题思路:
为了节省时间,先找出这些串中长度最短的,然后枚举这个串中的所有子串。再让这个子串或者反串去匹配每一个串,若都符合,即输出,然后退出。这里枚举,当然是从子串长度大的往小的枚举啦,节省时间。
不过还是写了3重for循环,但是串的长度,还有串的数量都是100以内的。所以复杂度还可以接受。1000000.
代码:
#include
#include
#include
#include
const int MAX=105;
using namespace std;
string str[MAX];
int n;
char* search(int index_min)
{
int i,j;
char sub[MAX];//子串为char型
string resub="";//倒转后的为string类,注意
//string sub,resub;
int len=str[index_min].size();
string min(str[index_min]);
for(i=len;i>=1;i--)//长度
{
for(j=0;j+i<=len;j++)//地址
{
min.copy(sub,i,j);
sub[i]='\0';
resub=sub;
reverse(resub.begin(),resub.end());
int Flag=0;
for(int h=0;h>cas;
while(cas--)
{
int i;
cin>>n;
int min_index=0;
for(i=0;i>str[i];
if(str[min_index].size()>str[i].size())
{
min_index=i;
}
}
ans=search(min_index);
//search(min_index);
//cout<