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
Sample Output
求最长公共子串,嗯反的正的是都可以
代码:
#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;
}
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;
}
相关文章推荐
- (整理)关于C语言中的输入和输出函数的一些运用
- 运用指针模拟实现一些代码以及memcpy函数与memmove函数的区别
- 关于python列表中的一些函数的运用
- 一些C++的字符函数
- 线程中的一些基本函数
- bashshell 2 对bashshell一些补充 以及函数的使用
- SQL 的一些常见函数
- 一些有用的javascript小函数
- Hanoi塔-函数递归方法的运用
- 函数参数的传递方式及一些容易出现的问题
- Javascript 库,封装了一些常用函数
- OpenCv里的一些基本函数,持续更新中。。。。。
- 一些socket 辅助函数的介绍和举例说明
- Oracle数据库对表的基本操作和一些常用函数
- 一些常用的表单提交检测函数
- 与Access数据库结构有关的一些函数
- 边学边记载的一些函数
- 一些常用函数
- lua的一些简单函数
- yaf框架的一些函数