题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763

题目大意:

给你一个字符串s,存在一个
子串E同时出现在前缀、中间、后缀,即EAEBE这种模式,A和B可以是任意长度字符串。

解题思路:

其实就是把所有公共前后缀都枚举一遍,每次将
s同时减去前缀和后缀,再将公共前后缀作为模式串进行kmp算法,如果能匹配到,则输出长度即可。

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=2e6+5;
 7
 8 int nxt1[maxn],nxt2[maxn],p[maxn];
 9 char s[maxn],str[maxn];
10
11 void getnext(char *t,int len,int *nxt){
12     int i,j;
13     i=0,j=nxt[0]=-1;
14     while(i<len){
15         while(j!=-1&&t[i]!=t[j])
16             j=nxt[j];
17         nxt[++i]=++j;
18     }
19 }
20
21 bool kmp(char *s,int len1,char *t,int len2){
22     int i,j;
23     i=j=0;
24     getnext(t,len2,nxt2);
25     while(i<len1){
26         while(j!=-1&&s[i]!=t[j])
27             j=nxt2[j];
28         i++,j++;
29         if(j==len2)
30             return true;
31     }
32     return false;
33 }
34
35 int main(){
36     int t;
37     scanf("%d",&t);
38     while(t--){
39         scanf("%s",s);
40         int len=strlen(s);
41         getnext(s,len,nxt1);
42         int t=nxt1[len];
43         int ans=0;
44         while(t>0){
45             if(kmp(s+t,len-2*t,s,t)){
46                 ans=t;
47                 break;
48             }
49             t=nxt1[t];
50         }
51         printf("%d\n",ans);
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/fu3638/p/8504002.html

HDU 4763 Theme Section(KMP+枚举公共前后缀)相关推荐

  1. HDU 4763 Theme Section ( KMP )

    题意 : 现有一字符串S,要求在S中找到最长的子串E,使得S满足格式"EAEBE",其中A,B可以为任意的S子串.也就是说子串E既是S的前缀也是S的后缀,同时还在S中间出现,但不与 ...

  2. hdu 4763 Theme Section(next数组找串中三段相等)

    题意:在一个串中找 EAEBE 的形式的最长的E,其中E为一个字符串,也就是说找到前缀与后缀相同,并且串中还存在相同的一段,它们不能重复. 思路:利用next数组,next[len]代表的即是最大的相 ...

  3. KMP算法及next数组(最大公共前后缀)求解

    KMP算法及next数组(最大公共前后缀)求解 2020.12.14理解: 1. KMP算法 网上关于KMP算法讲解较为简单易懂,因此在此只作简述: 在字符串s中匹配字符串t: S: ABE-AB-A ...

  4. Kmp算法之 求最大公共前后缀

    先抛问题1:如果我们已知一个字符str的最大公共前后缀长度,当这个str再添加一个字符的str2,如何判断这个新的str2的最大公共前后缀长度?? 结论:只要将新添加的字符,与str的最大公共前后缀中 ...

  5. 最长公共前后缀(KMP中next数组求法)

    字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串:后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串.例如对于字符串 abacaba,其前缀有 a, ab, aba, aba ...

  6. 7-3 最长公共前后缀

    字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串:后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串.例如对于字符串 abacaba,其前缀有 a, ab, aba, aba ...

  7. 7-3 最长公共前后缀

    字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串:后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串.例如对于字符串 abacaba,其前缀有 a, ab, aba, aba ...

  8. kmp, 字符串相同前后缀

    catalog 相同前后缀 O(n)构造 最长前后缀 数组 代码 在kmp中的用处.kmp原理 暴力 优化A_ind 优化B_ind kmp模板 相同前后缀 kmp的本质,就是 相同前后缀 所谓 相同 ...

  9. 7-1 最长公共前后缀

    字符串:abcdabcdabce 其未优化next数组:-1 0 0 0 0 1 2 3 4 5 6 7 最长公共前后缀: 0 0 0 0 1 2 3 4 5 6 7 0 最长公共前后缀和特征值有很大 ...

最新文章

  1. AttributerError: HTTPServer instance has no attribute 'server_forever'
  2. 两万字深度介绍分布式系统原理,一文入魂
  3. java设置并行度_控制Java并行流的并行度
  4. php重载,PHP 重载
  5. PHP防注入安全代码
  6. 【Java】Base64编码与解码
  7. linux定时重启命令
  8. ny 2 括号配对问题
  9. 马哥Linux2016最新高薪运维视频课程
  10. [导入]js 关联数组 详解
  11. Git命令提交代码步骤
  12. java c3p0 jar包_c3p0 jar包下载-c3p0-0.9.1.2.jar包下载 --pc6下载站
  13. Hadoop 版本与 HBase 版本 之间的对应关系整理
  14. MCE | 外泌体的检测提取机制
  15. silvaco学习日记(四)
  16. Dojo 学习--ADM
  17. 让人又爱又恨的C语言
  18. 攻防世界-Misc-新手练习记录
  19. ORACLE提供了 三种例外,oracle(7)例外处理
  20. CFA【异常检测:Embedding_based】

热门文章

  1. 解决delphi10.2.3 android tools闪退
  2. 软件测试随手记(转)
  3. C语言-getopt函数
  4. HDU 4565So Easy!2012长沙邀请赛A题(共轭构造+矩阵的快速幂)
  5. 应用下载店用户喜好分析
  6. c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
  7. string 替换_vim怎么查找与替换文字?比Windows记事本效率高太多了
  8. 大数据处理平台与案例
  9. Ubuntu 18.04 更改静态IP
  10. 设计模式-生产者消费者模式