题意:在一个串中找 EAEBE 的形式的最长的E,其中E为一个字符串,也就是说找到前缀与后缀相同,并且串中还存在相同的一段,它们不能重复。

思路:利用next数组,next[len]代表的即是最大的相同的前缀与后缀,然后让 i 从len-1往前遍历找到 i>=2(前面部分最少要有2个字符),在过程中更新最长的长度ans即可。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;#define MaxSize 1000005int _next[MaxSize];
char str[MaxSize];void GetNext(char t[]){//求next数组int j,k,len;j=0;k=-1;_next[0]=-1;len=strlen(t);while(j<len){if(k==-1||t[j]==t[k]){++j;++k;_next[j]=k;//此句可由优化替代/*优化(仅保证求KMPIndex时可用。谨慎使用。)if(t[j]!=t[k])next[j]=k;else next[j]=next[k];*/}else k=_next[k];}
}int main(){int t,i,k,len,m,ans;scanf("%d",&t);while(t--){scanf("%s",str);GetNext(str);//求子串的next数组len=strlen(str);m=_next[len];//m代表最大的首尾相同长度ans=0;for(i=len-1;i>=2;--i){k=_next[i];//k为i之前与开头重复的长度while(k>0){if(k<=m&&k+k<=i&&i+k<=len){//长度小于m,且三段不重合ans=max(ans,k);break;//当前是最大的长度
                }k=_next[k];//next[k]一定小于k
            }}printf("%d\n",ans);}return 0;
}

View Code

转载于:https://www.cnblogs.com/bofengyu/p/4750380.html

hdu 4763 Theme Section(next数组找串中三段相等)相关推荐

  1. HDU 4763 Theme Section(KMP+枚举公共前后缀)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个 子串E同时出现在前缀.中间.后缀,即EAEBE这种模式 ...

  2. HDU 4763 Theme Section ( KMP )

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

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

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

  4. C语言试题六十三之请编写函数fun:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

    1. 题目 请编写函数fun,其功能是:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研 ...

  5. C语言试题六十一之请编写函数fun:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中。

    1. 题目 请编写函数fun,其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程 ...

  6. C语言试题三十九之将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。

    1. 题目 请编写一个函数function,它的功能是:将s所指字符串中除了下标为奇数.同时ascii值也为奇数的字符外,其余的全都删除:串中剩余字符所形成的一个新串放在t所指的一个数组中. 2 .温 ...

  7. C语言试题三十八之将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。

    1. 题目 请编写一个函数function,它的功能是:将s所指字符串中除了下标为偶数.同时ascii值也为偶数的字符外,其余的全都删除:串中剩余字符所形成的一个新串放在t所指的一个数组中. 2 .温 ...

  8. es6 数组找最大值_自学Java笔记_day04_第四章 数组

    4.1 数组的相关概念和名词(了解) 1.数组(array): ​ 一组具有相同数据类型的数据的按照一定顺序排列的集合. ​ 把有限的几个相同类型的变量使用一个名称来进行统一管理. 2.数组名: ​ ...

  9. 实现对数组找最大最小数

    实现对数组找最大最小数 在用js的过程中我们往往会需要找到一个数组里最大或最小的数, 但是我们不能直接用Math.max(Arr)或Math.min(Arr),因为max()里面不能填数组,只能填连续 ...

最新文章

  1. 基于Java多线程操作文件案例分享
  2. 实战|简单绕过waf拿下赌博网站
  3. apt-get更新软件包_如何使用Apt-fast加速软件包下载和更新
  4. 如何优雅的移植JavaScript组件到Blazor
  5. poj1064 二分搜索 挑战程序设计竞赛
  6. Redis, Memcache 基本使用
  7. mysql-bin日志文件清理
  8. Java 多线程(一)并发、并行、线程、多线程、进程
  9. Exchange 2003 RPC over Http
  10. 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导
  11. SPSS-论文常用格式-三线表
  12. SMC真空电磁阀气路接法
  13. 思科模拟器交换机的几种配置模式
  14. findbugs 常见问题 及解决方案
  15. 我如何构建Pomodoro Clock应用程序,以及在此过程中学到的课程
  16. 分享7个比B站更刺激的老司机网站,别轻易点开
  17. java ieee_Java IEEE754 工具类
  18. 运维工程师 常见的 trouble shooting 故障排错思路
  19. 分布式消息中间件应用实践
  20. Python · 助力冬奥:制作冬奥倒计时窗体

热门文章

  1. 南宁网络推广浅谈能使文章快速收录的技巧有哪些?
  2. 网站关键词如何布局更有利于关键词排名提升?
  3. 网络营销外包——网络营销外包专员如何做好网站锚文本优化?
  4. 做了这么久SEO优化,想必你很了解“网页快照”!
  5. mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
  6. shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务
  7. 石嘴山考计算机在哪里报名,石嘴山中考报名系统
  8. python数据分析年薪百万_如何成为一个年薪 50 万以上的数据分析师?
  9. golomb哥伦布编码——本质上就是通过0来区分商和余数
  10. nginx的location配置root、alias用法和区别