题目大意:给你N个串,求出来他们的最大公共子串的长度(子串反过来也算他们的子串)。
 
分析:很久以前就做过这道题,当时是用的strstr做的,不过相同的都是枚举了子串......还是很暴力,希望下次遇到类似的题目我已经掌握高效的方法了。
==============================================================================
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. const int MAXN = ;
  5. const int oo = 1e9+;
  6. const int mod = ;
  7.  
  8. char s[MAXN][MAXN];
  9. int next[MAXN];
  10.  
  11. void GetNext(char s[], int N)
  12. {
  13. int i=, j=-;
  14. next[] = -;
  15.  
  16. while(i < N)
  17. {
  18. if(j==- || s[i]==s[j])
  19. next[++i] = ++j;
  20. else
  21. j = next[j];
  22. }
  23. }
  24. bool KMP(char a[], char b[])
  25. {
  26. int i=, j=;
  27. int Na = strlen(a);
  28. int Nb = strlen(b);
  29.  
  30. GetNext(b, Nb);
  31.  
  32. while(i < Na)
  33. {
  34. while(j==- || (a[i]==b[j] && i<Na))
  35. i++, j++;
  36. if(j == Nb)return true;
  37.  
  38. j = next[j];
  39. }
  40.  
  41. return false;
  42. }
  43. bool OK(char a[], char s[])
  44. {
  45. if(KMP(a, s) == true)
  46. return true;
  47. strrev(s);
  48.  
  49. return KMP(a, s);
  50. }
  51. int main()
  52. {
  53. int T;
  54.  
  55. scanf("%d", &T);
  56.  
  57. while(T--)
  58. {
  59. int i, j, k, N, len=oo, ans=;
  60. char a[MAXN];///保存最短的那个串
  61.  
  62. scanf("%d", &N);
  63.  
  64. for(i=; i<=N; i++)
  65. {
  66. scanf("%s", s[i]);
  67.  
  68. int M = strlen(s[i]);
  69.  
  70. if(len > M)
  71. {
  72. len = M;
  73. strcpy(a, s[i]);
  74. }
  75. }
  76.  
  77. for(i=; i<=len; i++)
  78. for(j=; i+j<=len; j++)
  79. {
  80. char b[MAXN] = {};
  81.  
  82. strncpy(b, a+j, i);
  83.  
  84. for(k=; k<=N; k++)
  85. {
  86. if(OK(s[k], b) == false)
  87. break;
  88. }
  89.  
  90. if(k > N)
  91. j=len, ans = i;
  92. }
  93.  
  94. printf("%d\n", ans);
  95. }
  96.  
  97. return ;
  98. }

Substrings - HDU 1238(最大共同子串)的更多相关文章

  1. (KMP 字符串处理)Substrings -- hdu -- 1238

    http://acm.hdu.edu.cn/showproblem.php?pid=1238 Substrings Time Limit:1000MS     Memory Limit:32768KB ...

  2. HDOJ 1238 Substrings 【最长公共子串】

    HDOJ 1238 Substrings [最长公共子串] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  3. hdu 1238 Substrings(kmp+暴力枚举)

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...

  4. spoj 694. Distinct Substrings 后缀数组求不同子串的个数

    题目链接:http://www.spoj.com/problems/DISUBSTR/ 思路: 每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数.如果所有的后缀按照su ...

  5. HDU 1238 Substing

    思路: 1.找出n个字符串中最短的字符串Str[N] 2.从长到短找Str[N]的子子串 subStr[N],以及subStr[N]的反转字符串strrev(subStr[N]):(从长到短是做剪枝处 ...

  6. HDU 1238

    好吧,这题直接搜索就可以了,不过要按照长度最短的来搜,很容易想得到. 记得ACM比赛上有这道题,呃..不过,直接搜..呵呵了,真不敢想. #include <iostream> #incl ...

  7. hdu 1003 最大连续子串

    #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #defin ...

  8. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)

    题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 可是大部分时间是在调试代码.由于模板的全局变量用混了,而自 ...

  9. HDU - 2328 Corporate Identity(kmp+暴力)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2328 题意:多组输入,n==0结束.给出n个字符串,求最长公共子串,长度相等则求字典序最小. 题解:(居 ...

随机推荐

  1. 共享受限资源,Brian的同步规则

    说明:如果一个变量是boolean,则此变量是原子性的,即赋值和返回值简单的操作在发生时没有中断的可能. 递增不是原子性炒作. 解决共享资源竞争: 1. 通过加锁,锁语句会产生相互排斥的效果,此种机制 ...

  2. gulp安装

    1. npm install gulp -g    全局安装  npm install gulp --save-dev  安装文件内,纪录于package.json     接著安装插件,完成下列任务 ...

  3. mahout的安装、配置及运行java程序

    一.下载安装包: http://mahout.apache.org/general/downloads.html 二.解压: 将下载的安装包解压到需要的目录下 三.配置环境变量: export MAH ...

  4. 编码问题导致样式显示在IE中不正常

    今天在做项目的时候,遇到样式显示不正常的问题,结果是因为用系统自带的notepad编辑器编辑文件时,编码格式被更改了.我们需要在Notepad++中,将编码格式改成Encode inUTF8 with ...

  5. C# Winform 双屏显示

    双屏显示1 // 利用WinForm中的Screen类,即可比较方便地实现多窗体分别在多个屏幕上显示. //•获取当前系统连接的屏幕数量: Screen.AllScreens.Count(); //• ...

  6. asp.net在应用母版的页面下采用了ModalPopupExtender弹出窗中应用autocomplete

    autocomplete是jqueryUI的一个插件,可以实现自动填充的功能. 要点:1.应用了母版页,所以取页面上控件的ID时与一般方法不同 2.由于用了ajax的updatepanel,所以会出现 ...

  7. php之利用递归写无限极分类

    <?php //无限极分类 //parent 的值,是该栏目的父栏目的id 反之是 /*0 安徽 合肥 北京 海淀 中关村 上地 河北 石家庄 */ $area = array( array(' ...

  8. JS和jQuery获取节点的兄弟,父级,子级元素

    原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的 ...

  9. JS设置Cookie,及COOKIE的限制

    在Javascript脚本里,一个cookie 实际就是一个字符串属性.当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值.每个cookie除了 name ...

  10. angular 实现总价满100折扣

    <div ng-controller="CartController"> <div ng-repeat="item in items"> ...