您的位置:首页 > 其它

F - Substrings(一些函数的运用)

2017-11-10 21:03 477 查看
 F - Substrings(一些函数的运用)

You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.

Input The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings,
followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.

Output There should be one line per test case containing the length of the largest string found.

Sample Input
2
3
ABCD
BCDFF
BRCD
2
rose
orchid

Sample Output
2
2


求最长公共子串,嗯反的正的是都可以

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
char str[105][105];
int len[105];
char s1[105],s2[105];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int minn=1000,u=-1;
for(int i=0;i<n;i++)
{
scanf("%s",str[i]);
len[i]=strlen(str[i]);
if(len[i]<minn)
minn=len[i],u=i; //找到最小的字符串了并且知道他们大家的字符串长度了 因为最小的字符串可能有多个 但是相等没有关系!
//因为最后都是决定于最小的 记录下最短字符串在哪个地方
}
int maxn=0,k,i,j,gg,length;
for(i=0;i<minn;i++)
{
for(j=1;j<=minn-i;j++)
{
strncpy(s1,str[u]+i,j);//正向字符串从s1中copy j个
s1[j]='\0';
strcpy(s2,s1);
length=strlen(s1);//反向字符串
strrev(s2);//这个是字符串反转函数也可以下面注释掉的那样子的求法
/* for(k=length-1,gg=0;k>=0;k--,gg++)
s2[k]=s1[gg];
s2[length]='\0';*/
int flag=1;
for(k=0;k<n;k++)
{
if(!strstr(str[k],s1)&&!strstr(str[k],s2))//这个函数是比较后面是否在前面出现 在返回地址
{

flag=0;
break;
}
}
if(flag)
maxn=max(maxn,length);
}
}
printf("%d\n",maxn);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: