暴力枚举(字符串匹配)-Blue Jeans POJ - 3080
暴力枚举(字符串匹配)-Blue Jeans POJ - 3080
题目:
Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的分布图。
作为IBM研究人员,您的任务是编写一个程序,该程序将在给定的DNA片段之间找到共同点,这些片段可以与单个调查信息相关联以识别新的遗传标记。
通过在分子中发现氮碱基的顺序列出DNA碱基序列,可以注意到DNA碱基序列。有四个碱基:腺嘌呤(A),胸腺嘧啶(T),鸟嘌呤(G)和胞嘧啶(C)。6个碱基的DNA序列可以表示为TAGACC。
给定一组DNA碱基序列,请确定出现在所有序列中的最长碱基序列。
Input
该问题的输入将从包含单个整数n的行开始,该整数指示数据集的数量。每个数据集都包含以下数据:
单个正整数m(2 <= m <= 10)指示此数据集中的碱基序列数。
m行,每个行包含一个由60个碱基组成的单个碱基序列。
Output
对于输入中的每个数据集,输出所有给定碱基序列共有的最长碱基子序列。如果最长的公共子序列的长度小于3个碱基,则显示字符串“no significant commonalities”。如果存在多个最长长度相同的子序列,则仅输出按字典序最小的子序列。
Sample Input
3
2
GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
3
GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
GATACTAGATACTAGATACTAGATACTAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA
GATACCAGATACCAGATACCAGATACCAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA
3
CATCATCATCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
ACATCATCATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACATCATCATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
Sample Output
no significant commonalities
AGATAC
CATCATCAT
题意:
输 入 m 个 长 度 为 60 的 字 符 串 , 判 断 能 否 在 m 个 串 中 找 出 共 同 的 长 度 大 于 等 于 3 的 子 串 。 输入m个长度为60的字符串,判断能否在m个串中找出共同的长度大于等于3的子串。 输入m个长度为60的字符串,判断能否在m个串中找出共同的长度大于等于3的子串。
题解:
暴 力 枚 举 。 暴力枚举。 暴力枚举。
① 、 把 第 一 个 串 看 作 模 式 串 , 第 一 层 从 60 到 3 枚 举 子 串 的 长 度 k 。 ② 、 第 二 层 枚 举 模 式 串 的 起 点 i 。 截 取 长 度 为 k 的 子 串 t m p 。 ③ 、 对 剩 下 m − 1 个 串 进 行 匹 配 , 匹 配 成 功 的 标 志 是 指 针 j = m + 1 , 把 匹 配 成 功 的 答 案 存 入 a n s 。 同 时 要 注 意 a n s 的 字 典 序 未 必 最 小 , 因 此 要 在 当 前 k 循 环 内 继 续 更 新 。 在 k 的 某 一 趟 循 环 中 , 若 能 匹 配 成 功 , 那 么 这 趟 循 环 结 束 后 必 然 得 出 答 案 。 ④ 、 判 断 能 否 找 到 大 于 等 于 3 的 共 同 子 串 的 标 志 是 a n s 是 否 为 空 。 ①、把第一个串看作模式串,第一层从60到3枚举子串的长度k。\\②、第二层枚举模式串的起点i。截取长度为k的子串tmp。\\③、对剩下m-1个串进行匹配,匹配成功的标志是指针j=m+1,把匹配成功的答案存入ans。\\ \qquad同时要注意ans的字典序未必最小,因此要在当前k循环内继续更新。\\ \qquad在k的某一趟循环中,若能匹配成功,那么这趟循环结束后必然得出答案。\\④、判断能否找到大于等于3的共同子串的标志是ans是否为空。 ①、把第一个串看作模式串,第一层从60到3枚举子串的长度k。②、第二层枚举模式串的起点i。截取长度为k的子串tmp。③、对剩下m−1个串进行匹配,匹配成功的标志是指针j=m+1,把匹配成功的答案存入ans。同时要注意ans的字典序未必最小,因此要在当前k循环内继续更新。在k的某一趟循环中,若能匹配成功,那么这趟循环结束后必然得出答案。④、判断能否找到大于等于3的共同子串的标志是ans是否为空。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 0x7fffffff
using namespace std;
const int M=11;
int T,m;
string s[M];int main()
{cin>>T;while(T--){scanf("%d",&m);for(int i=1;i<=m;i++)cin>>s[i];string ans="";for(int k=60;k>=3;k--) ///枚举最长长度{for(int i=0;i+k<=60;i++) ///枚举模式串的起点{string tmp=s[1].substr(i,k);int j;for(j=2;j<=m;j++) ///枚举剩下的m-1个串{if(s[j].find(tmp,0)==-1)break;}if(j==m+1&&(ans.empty() || ans>tmp )) ///j==m+1则说明以i为起点长度为k的子串与剩下m-1个串都匹配,ans=tmp; ///这里不能break,还要继续往下找字典序更小的}if(!ans.empty()) break; ///非空,说明已经找到,第一次找到的必然是长度最大的}if(ans.empty()) cout<<"no significant commonalities"<<endl;else cout<<ans<<endl;}return 0;
}
暴力枚举(字符串匹配)-Blue Jeans POJ - 3080相关推荐
- 字符串匹配优化(KMP)(写+转载)
我的理解:总的来说,由于传统的暴力求字符串匹配复杂度为0(n*m),效率太低.然后出现了KMP算法,效率 0(m+n).其算法的核心在于求解最长前缀后得到要跳过的距离(即不需要去匹配的串直接跳过) 题 ...
- POJ - 3080 Blue Jeans(暴力+KMP)
题目链接:点击查看 题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个 题目分析:一开始看到这个题目的时候我是没有想到暴力的.. ...
- POJ 3461 字符串匹配(KMP / 哈希(有推导))
文章目录 1. 题目 1.1 题目链接 1.2 题目大意 2. Accepted代码 2.1 KMP解法 2.2 哈希法(有推导过程) 1. 题目 1.1 题目链接 http://poj.org/pr ...
- 字符串匹配——枚举法
字符串匹配--枚举法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里先给出枚举法的思想. 设主串T的长度为n,模式串P的长度为m. ...
- POJ 3174 暴力枚举
思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...
- 【POJ - 2965】The Pilots Brothers' refrigerator(暴力枚举,思维)
题干: The game "The Pilots Brothers: following the stripy elephant" has a quest where a play ...
- 字符串匹配のKMP【专题@AbandonZHANG】
算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...
- 字符串匹配のKMP【@Abandon】
算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...
- 字符串匹配(多模式匹配篇)
字符串匹配(多模式匹配篇) 摘要: 问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题.但怎样solve多模式串匹配问题呢? Solve:本文用简要记叙了使用trie树,tr ...
最新文章
- Linux系统新手学习的11点建议
- 图解完整模式安装windows server 2008企业版[为企业部署Windows Server 2008系列四]
- Android数据填充器LayoutInflater
- 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
- Access-数据类型与.net OleDbType枚举类型对应关系
- python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...
- mobilenet cpu 加速_AMD锐龙5000系列CPU价格公布 哪款才是性价比之王_搜狐汽车
- Mac安装Docker及使用
- Matlab学习笔记(一)--数值数据
- oracle序列建同义词,oracle序列创建同义词
- Lua - 从指定时区提供的时间戳、时区的 UTC 时差,转换为对应当前本地 UTC 时差后的时间
- 《股票大作手操盘术--杰西.利弗莫尔》
- 杂记——贝叶斯可信区间与频率置信区间的区别
- PDF文件如何转换成png图片
- M24C08-RMN6TP
- MOGRT替换视频,图像,照片及LOGO?如何替换PR动态图形模板中的图片视频素材
- 重新安装键盘鼠标后,PS2键盘无法识别问题!
- 原生JS灵魂之问(中),看看你是否熟悉JavaScript?
- flac格式怎样转换成mp3?
- ciObjectFactory::create_new_metadata