题目网址:http://poj.org/problem?id=3080

思路:

以第一个DNA序列s为参考序列,开始做以下的操作。

1.将一个字母s[i]作为匹配串。(i为当前遍历到的下标)

2.遍历所有序列,看是否是所有序列的公共子串

3.是所有序列的子串的话,再往后增加一个字母,组成一个长度len+1的匹配串(设原先匹配串长度为len),重复步骤2

4.不是所有序列的子串的话,i=len+i;判断len是否大于3,是的话保存子串。len=0;重复步骤1。(为什么 i=len+i呢?因为len+i都是已经匹配到的,则从i+1 到 i+len 的匹配数会分别比当前匹配数小1…len-1 可以自己推一遍为什么)

5.对结果排序,找出最长,若长度相同的情况下,字典序最小的子串

代码:

 #include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int n;
char s[][];
char temp[];
vector<string>v;
map<string,int>mp;
bool cmp(string x,string y){
if(x.length()==y.length()){
int i=;
while (x[i]==y[i]) i++;
return x[i]<y[i];
}
return x.length()>y.length();
}
int main(){
int t;
scanf("%d",&t);
while (t--) {
mp.clear();
v.clear();
scanf("%d",&n);
for (int i=; i<n; i++) scanf("%s",s[i]);
for (int i=; i<; i++) {
int ok=,l=;
string str="";
memset(temp, , sizeof(temp));
temp[]=s[][i];
while(l+i< && ok){
for (int i=; i<n; i++) {
if(strstr(s[i], temp)==NULL){
ok=;
break;
}
}
if(ok){
str+=s[][i+l];
l++;
temp[l]=s[][i+l];
}
}
if(mp[str]== && str.size()>=){
v.push_back(str);
mp[str]=;
i=l+i;
}
}
sort(v.begin(), v.end(), cmp);
if (v.size()>) cout<<v[]<<endl;
else printf("no significant commonalities\n");
}
}

POJ 3080 Blue Jeans(串)的更多相关文章

  1. POJ 3080 Blue Jeans (求最长公共字符串)

    POJ 3080 Blue Jeans (求最长公共字符串) Description The Genographic Project is a research partnership between ...

  2. POJ 3080 Blue Jeans(Java暴力)

    Blue Jeans [题目链接]Blue Jeans [题目类型]Java暴力 &题意: 就是求k个长度为60的字符串的最长连续公共子串,2<=k<=10 规定: 1. 最长公共 ...

  3. POJ 3080 Blue Jeans 找最长公共子串(暴力模拟+KMP匹配)

    Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20966   Accepted: 9279 Descr ...

  4. poj 3080 Blue Jeans

    点击打开链接 Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10243   Accepted: 434 ...

  5. POJ 3080 Blue Jeans (字符串处理暴力枚举)

    Blue Jeans  Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 21078        Accepted: ...

  6. POJ - 3080 Blue Jeans 【KMP+暴力】(最大公共字串)

    <题目链接> 题目大意: 就是求k个长度为60的字符串的最长连续公共子串,2<=k<=10 限制条件: 1.  最长公共串长度小于3输出   no significant co ...

  7. poj 3080 Blue Jeans 解题报告

    题目链接:http://poj.org/problem?id=3080 该题属于字符串处理中的串模式匹配问题.题目要求我们:给出一个DNA碱基序列,输出最长的相同的碱基子序列.(保证在所有的序列中都有 ...

  8. POJ 3080 Blue Jeans(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3080 [题目大意] 求k个串的最长公共子串,如果存在多个则输出字典序最小,如果长度小于3则判断查找失败. [题解] 将所有字符串通 ...

  9. POJ 3080 Blue Jeans 后缀数组, 高度数组 难度:1

    题目 http://poj.org/problem?id=3080 题意 有m个(2<=m<=10)不包含空格的字符串,长度为60个字符,求所有字符串中都出现过的最长公共子序列,若该子序列 ...

随机推荐

  1. 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境

    1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...

  2. 腾讯、阿里、百度、360、114 公共DNS分享

    DNS,在互联网有着重要的地位,域名转换成IP,都是DNS在工作. 腾讯 DNS+ IP:119.29.29.29 备用:182.254.116.116 阿里DNS ip:223.5.5.5 223. ...

  3. Java优化策略小积累

    1.尽量避免大量使用静态变量 package com.cfang.jvm; public class Test2 { private static Test1 test1 = new Test1(); ...

  4. 品Spring:SpringBoot轻松取胜bean定义注册的“第一阶段”

    上一篇文章强调了bean定义注册占Spring应用的半壁江山.而且详细介绍了两个重量级的注册bean定义的类. 今天就以SpringBoot为例,来看看整个SpringBoot应用的bean定义是如何 ...

  5. Spring MVC 梳理 - handlerMapping和handlerAdapter分析

    参考图片 综上所述我们来猜测一下spring mvc 中根据URL找到处理器Controller中相应方法的流程 ①:获取Request的URL ②:从UrlLookup这个map中找到相应的requ ...

  6. springboot 配置mybatis打印sql

    方式 一: ###########################################################配置打印sql############################ ...

  7. python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用

    先引入一下百度百科对于正则表达式的概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...

  8. Spark 学习笔记之 aggregateByKey

    aggregateByKey: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apac ...

  9. ELK 学习笔记之 elasticsearch bool组合查询

    elasticsearch bool组合查询: 相当于sql:where _type = 'books' and (price = 500 or title = 'bigdata') Note: mu ...

  10. git checkout 提示 “error: The following untracked working tree files would be overwritten by checkout” 解决

    问题描述 Windows 或者 macOS 操作系统中,文件名是不区分大小写的.对于已经提交到仓库中的文件修改文件名的大小写,然后又用 git rm 命令将老文件从 Git 仓库删除掉,并保存下新的文 ...