题意:

  求所有串的最长公共子串,若有多个输出字典序最小的

分析:

  对第一个串的每一个后缀分别与剩下的所有串进行匹配,求得公共子串

  对每一个公共子串,记录下最大值即可.

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int MAXN = 66;
 6 int nxt[MAXN];
 7 void GetNxt(char p[], int m)
 8 {
 9     int j = 0, k = -1;
10     nxt[0] = -1;
11     while(j < m)
12     {
13         if(k != -1 && p[j] != p[k]) k = nxt[k];
14         else nxt[++j] = ++k;
15     }
16 }
17 int KMP(char s[], int n, char p[], int m)
18 {
19     int res = 0;
20     for (int i = 0, k = 0; i < n; i++)
21     {
22         while (k > 0 && p[k] != s[i]) k = nxt[k];
23         if (p[k] == s[i]) k++;
24         res = max(res, k);
25         if (k == m) k = nxt[k];
26     }
27     return res;
28 }
29 char p[MAXN], s[20][MAXN];
30 int n, t, len;
31 int ans;
32 char res[MAXN], T[MAXN];
33 int main()
34 {
35     scanf("%d", &t);
36     while (t--)
37     {
38         ans = 0;
39         scanf("%d", &n);
40         scanf("%s", p);
41         len = strlen(p);
42         for (int i = 1; i < n; i++) scanf("%s", s[i]);
43
44         for (int i = 0; i < len; i++) // 枚举每一个后缀
45         {
46             int tmp = 66;
47             GetNxt(p+i, len-i);
48             for (int j = 1; j < n; j++)
49                 tmp = min(tmp, KMP(s[j], len, p+i, len-i)); // 公共匹配的长度
50
51             strncpy(T, p+i, tmp);
52             T[tmp] = '\0';
53             if (tmp > ans) //记录最大值
54             {
55                 ans = tmp;
56                 strcpy(res, T);
57             }
58             else if (tmp == ans && strcmp(res, T) > 0)
59             {
60                 strcpy(res, T);
61             }
62         }
63         if (ans < 3) puts("no significant commonalities");
64         else puts(res);
65     }
66 }

转载于:https://www.cnblogs.com/nicetomeetu/p/5877430.html

POJ 3080 - Blue Jeans相关推荐

  1. POJ 3080 Blue Jeans (KMP)

    链接:http://poj.org/problem?id=3080 题目: Description The Genographic Project is a research partnership ...

  2. POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)

    题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个. 思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串.判断是否为字 ...

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

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

  4. poj 3080 Blue Jeans

    #include <iostream> //KMP+枚举#include<string>using namespace std;#define len 60char str[1 ...

  5. POJ 3080 Blue Jeans (后缀数组)

    题目大意: 求出这些DNA序列中的最长且字典序最小的公共子串. 思路分析: 二分长度的答案,去height中扫描这个长度是否满足,一旦满足就立即输出.这样就能够保证字典序最小了. #include & ...

  6. 暴力枚举(字符串匹配)-Blue Jeans POJ - 3080

    暴力枚举(字符串匹配)-Blue Jeans POJ - 3080 题目: Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的 ...

  7. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  8. [POJ3080 Blue Jeans]

    [题目来源]:South Central USA 2006 [关键字]:字符串 [题目大意]:找出给所有字符串的最长公共字串. //================================== ...

  9. POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解

    代码来源:TYUT_YancyKahn AC的C++语言程序如下: #include <iostream> #include <cstring> #include <cs ...

最新文章

  1. vue-cli——vue-resource登录注册实例
  2. 小白的python之路11/3总结
  3. redis的hash操作在集中式session中的应用
  4. [转]常用数字处理算法的Verilog实现
  5. 商品详细信息的代码html_Web前端,你该有的代码规范
  6. HDU4462-稻草人
  7. CF1526 D. Kill Anton
  8. 计算机指令格式_计算机科学组织| 指令格式
  9. 运维更简单、更智能,让运维人不再 “拼命”
  10. 区块链安全 - DAO攻击事件解析
  11. 被替换的项目不是替换值长度的倍数_机器学习中处理缺失值的9种方法
  12. steam一键授权工具_超实用小工具!一键将PC其它平台的游戏导入Steam
  13. html切图软件,切图工具/插件介绍
  14. 树形结构的数据库表设计
  15. “Unexpected end of JSON input while parsing near···”错误解决方案
  16. (数位dp) 算法竞赛入门到进阶 书本题集
  17. 基于高光谱成像技术结合卷积神经网络的马铃薯病害检测
  18. win7系统自带的录像在哪里 Win7问题步骤记录器教程详解
  19. 链游系列 Decentraland / MANA 项目玩法解析
  20. 第12章、类和动态内存分配

热门文章

  1. ROM存储1/4周期正弦信号构造DDS
  2. 关于标题的多HTML定制
  3. html5两条直线,Html5新特性用canvas标签画多条直线附效果截图
  4. 如何自动升级php数据库,php – 如何在现实世界中“升级”数据库?
  5. android都图片mat_普通Android码农,该如何逆袭月薪5W的移动端架构师?
  6. linux编码合适修改_CentOS升级Linux内核备忘录
  7. java音乐网站源码_Vue + SpringBoot + MyBatis 音乐网站
  8. php如何把图片铺满,PHP如何裁剪图片成固定大小
  9. kotlin方法类型_Kotlin类型检查,Kotlin类型铸造
  10. jdk和jre和jvm区别_JDK,JRE和JVM之间的区别