poj3080——Blue Jeans
来源:互联网 发布:淘宝设计感饰品 知乎 编辑:程序博客网 时间:2024/06/05 23:55
题目大意:给出多个ATCG组成的字符串,写个程序找出他们的最长公共连续子串
输入:case个数n
第i个case的字符串个数m (2 <= m <= 10)
第i个case的第k个字符串(长度为60)
输出:若最长公共连续子串长度小于3则输出no significant commonalities
否则输出该子串(若有多个最长,则按字母序输出第一个)
分析:这道题可以用暴力或者KMP(改进的字符串匹配算法)。
暴力:暴力枚举第一个字符串的所有子串,看看是否存在于其他字符串中
代码:kmp参考https://www.cnblogs.com/yjiyjige/p/3263858.html
暴力枚举:转载自http://blog.csdn.net/libin56842/article/details/17204373
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char str[15][65];
char sub[65];
char ans[65];
int len;
int main()
{
int t,i,j,k,n,maxn;
scanf("%d",&t);
while(t--)
{
maxn = 0;
scanf("%d",&n);
memset(ans,'\0',sizeof(ans));
for(i = 1; i<=n; i++)
scanf("%s",str[i]);
for(i = 1; i<=60; i++)//从第一个字符串中取出的子串长度
{
int find = 0;//判断这个长度的子串是否出现在所有子串中
for(j = 0; j<=60-i; j++)//长度为i的子串的开始指针
{
len = 0;
int check = 1;
for(k = j;;k++)
{
sub[len++] = str[1][k];
if(len == i)
break;
}
sub[len] = '\0';
for(k = 2; k<=n; k++)
{
if(!strstr(str[k],sub))
{
check = 0;
break;
}
}
if(check)
{
find = 1;
if(strlen(ans)<strlen(sub))
strcpy(ans,sub);
else if(strcmp(ans,sub)>0)//按字典序最小输出
strcpy(ans,sub);
}
}
if(!find)//如果这个长度的所有子串搜索结束find还为0,则跳出循环,证明已经达到最大长度
break;
}
if(strlen(ans)<3)
printf("no significant commonalities\n");
else
printf("%s\n",ans);
}
return 0;
}
- POJ3080——Blue Jeans
- poj3080——Blue Jeans
- poj3080——Blue Jeans(字串)
- poj3080 blue Jeans
- poj3080 Blue Jeans-------KMP
- Blue Jeans poj3080
- POJ3080 Blue Jeans
- POJ3080:Blue Jeans
- POJ3080 Blue Jeans
- poj3080 Blue Jeans
- [POJ3080] Blue Jeans
- POJ3080 Blue Jeans
- POJ3080 Blue Jeans
- poj3080 Blue Jeans
- POJ3080-Blue Jeans
- POJ3080 Blue Jeans
- POJ3080-Blue Jeans
- poj3080 Blue Jeans
- 工作内容
- 欢迎使用CSDN-markdown编辑器
- GitHub使用流程
- [模板]
- EasyUI datagrid之rowStyler,formatter函数
- poj3080——Blue Jeans
- Ajax实现异步请求步骤
- 【Scikit-Learn 中文文档】高斯混合模型
- [模板]
- [RTSP]WPF用Emgu显示RTSP视频
- java输入月份--判断季节和天数
- 状压DP
- 遇到一个比较有意思的NIO问题!
- Excel在统计分析中的应用—第八章—假设检验-总体比例的假设检验