#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<
题目大意: 给你n个字符串,然后要求求一个最大的子串(或者子串的反串,子串可以倒过来的意思)在每个字符串中都出现。要求求这个子串的长度。 解题思路: 为了节省时间,先找出这些串中长度最短的,然后枚举这个串中的所有子串。再让这个子串或者反串去匹配每一个串,若都符合,即输出,然后退出。这里枚举,当然是从子串长度大的往小的枚举啦,节省时间。 不过还是写了3重for循环,但是串的长度,还有串的数量都是100以内的。所以复杂度还可以接受。1000000. 代码:
转载于:https://www.cnblogs.com/cchun/archive/2011/12/01/2520198.html