暴力枚举(字符串匹配)-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相关推荐

  1. 字符串匹配优化(KMP)(写+转载)

    我的理解:总的来说,由于传统的暴力求字符串匹配复杂度为0(n*m),效率太低.然后出现了KMP算法,效率 0(m+n).其算法的核心在于求解最长前缀后得到要跳过的距离(即不需要去匹配的串直接跳过) 题 ...

  2. POJ - 3080 Blue Jeans(暴力+KMP)

    题目链接:点击查看 题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个 题目分析:一开始看到这个题目的时候我是没有想到暴力的.. ...

  3. POJ 3461 字符串匹配(KMP / 哈希(有推导))

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 2. Accepted代码 2.1 KMP解法 2.2 哈希法(有推导过程) 1. 题目 1.1 题目链接 http://poj.org/pr ...

  4. 字符串匹配——枚举法

    字符串匹配--枚举法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里先给出枚举法的思想. 设主串T的长度为n,模式串P的长度为m. ...

  5. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  6. 【POJ - 2965】The Pilots Brothers' refrigerator(暴力枚举,思维)

    题干: The game "The Pilots Brothers: following the stripy elephant" has a quest where a play ...

  7. 字符串匹配のKMP【专题@AbandonZHANG】

    算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...

  8. 字符串匹配のKMP【@Abandon】

    算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...

  9. 字符串匹配(多模式匹配篇)

    字符串匹配(多模式匹配篇) 摘要: 问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题.但怎样solve多模式串匹配问题呢? Solve:本文用简要记叙了使用trie树,tr ...

最新文章

  1. Linux系统新手学习的11点建议
  2. 图解完整模式安装windows server 2008企业版[为企业部署Windows Server 2008系列四]
  3. Android数据填充器LayoutInflater
  4. 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
  5. Access-数据类型与.net OleDbType枚举类型对应关系
  6. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...
  7. mobilenet cpu 加速_AMD锐龙5000系列CPU价格公布 哪款才是性价比之王_搜狐汽车
  8. Mac安装Docker及使用
  9. Matlab学习笔记(一)--数值数据
  10. oracle序列建同义词,oracle序列创建同义词
  11. Lua - 从指定时区提供的时间戳、时区的 UTC 时差,转换为对应当前本地 UTC 时差后的时间
  12. 《股票大作手操盘术--杰西.利弗莫尔》
  13. 杂记——贝叶斯可信区间与频率置信区间的区别
  14. PDF文件如何转换成png图片
  15. M24C08-RMN6TP
  16. MOGRT替换视频,图像,照片及LOGO?如何替换PR动态图形模板中的图片视频素材
  17. 重新安装键盘鼠标后,PS2键盘无法识别问题!
  18. 原生JS灵魂之问(中),看看你是否熟悉JavaScript?
  19. flac格式怎样转换成mp3?
  20. ciObjectFactory::create_new_metadata

热门文章

  1. Exchange Server 2016单机版部署
  2. Quick Sort ( simple verson )
  3. Spring Boot 集成 FreeMarker 详解案例
  4. SteamVR+Unreal4 VR开发心得(一)
  5. AssertionError:nbsp;Badlynbsp;…
  6. Linux之用户管理
  7. 【ChatGLM vs ChatGPT】怎样实现机器人自动写代码?不少于3000字。
  8. 网红送餐无人车冒充AI,真人海外远程操控
  9. 关于上帝的笑话十则(爆笑)
  10. 萌新学Java之渐入佳境一----初识多线程