给定一个字符串,求出一个前缀A,使得字符串的构成可以表示成ABABA的形式(B可以为空串)。

输出这个前缀的最大长度。

KMP算法Next数组的使用。

枚举中间的每个位置,可以根据Next数组求出这个位置对应的前缀。然后暴力判断前缀与后缀是否相等即可。

如图,枚举的位置为 i,则Next[i] = j,。然后判断0~j 是否和 k~len是否是相同的。

注意要判断合法性,即前缀 + 中缀的长度不能比当前枚举的位置大,且后缀开始的位置一定要比当前枚举的位置大。

判定完Next[i]后,一定要判定Next[ Next[i] ],这样递归下去,看看大的如果不符合,小的是否符合。

然而复杂度,我不会证明。

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000010 int Next[maxn]; void GetNext(char s[], int len)
{
Next[] = -;
int j = -;
for (int i = ; i < len; i++)
{
while(j > - && s[j+] != s[i])
j = Next[j];
if (s[j+] == s[i]) j++;
Next[i] = j;
}
} int main()
{
int n;
scanf("%d", &n);
for (int ca = ; ca <= n; ca++)
{
char s[maxn];
scanf("%s", s);
int len = strlen(s), ans = ;
GetNext(s, len);//求出Next数组 for (int i = len-; i >= ; i--)
{
int j = i;
while(j > -)
{
if ((j+)* <= i+ && len - (j+) > i)//判断相互的位置的合法性
{
int flag = ;
for (int k = ; k < j+; k++)
if (s[len - (j+) + k] != s[k])
{
flag = ;
break;
}
if (flag) //前缀和后缀匹配
ans = max(ans, j+);
}
j = Next[j]; //判断比它小的是否符合
}
}
printf("%d\n", ans);
} }

HDU - 4763 Theme Section (KMP的next数组的应用)的更多相关文章

  1. hdu 4763 Theme Section(KMP水题)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  2. HDU 4763 Theme Section(KMP灵活应用)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

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

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

  4. HDU 4763 Theme Section ( KMP next函数应用 )

    设串为str, 串长为len. 对整个串求一遍next函数,从串结尾开始顺着next函数往前找<=len/3的最长串,假设串长为ans,由于next的性质,所以找到的串肯定满足E……E这种形式, ...

  5. 2013长春网赛1005 hdu 4763 Theme Section(kmp应用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题意:给出一个字符串,问能不能在该串的前中后部找到相同的子串,输出最长的字串的长度. 分析:km ...

  6. HDU 4763 Theme Section (2013长春网络赛1005,KMP)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  7. HDU 4763 Theme Section

    题目: It's time for music! A lot of popular musicians are invited to join us in the music festival. Ea ...

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

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

  9. CF126B password&&HDU 4763 Theme Section

    http://acm.hdu.edu.cn/showproblem.php?pid=4763 http://codeforces.com/problemset/problem/126/B 这两个题都是 ...

随机推荐

  1. nio aio netty区别

    传统io就是bio     同步阻塞         但可以采用伪同步 nio  jdk1.7以前     同步非阻塞io     1.7以后     同步异步非阻塞                  ...

  2. 项目打包发布到tomcat中,中文出现乱码

    先吐槽一下,花了我3个小时,心累 本地运行正常,发布时maven插件里要加utf-8编码 https://blog.csdn.net/testcs_dn/article/details/4558379 ...

  3. FloatHelper

    function FloatHelper() { } FloatHelper.prototype.showFloater = function (Target, Title, Action, Acti ...

  4. 前端开发如何做好SEO优化的工作

    前端开发工程师不仅需要要跟视觉设计师.交互式设计师配合,完美还原设计图稿,编写兼容各大浏览器.加载速度快.用户体验好的页面.现在还需要跟SEO人员配合,调整页面的代码结构和标签. 一些成熟的平台,在开 ...

  5. Random类、ThreadLocalRandom类

    Random和ThreadLocalRandom类均用于生成伪随机数. Random的构造函数: Random()     默认以系统当前时间为种子,相当于Random(System.currentT ...

  6. 使用OpenSSH远程管理Linux服务器

    一.使用OpenSSH远程管理Linux服务器 sshd是OpenSSH的服务器端守护进程,与之对应的Windows下客户端软件有SecureCRT/Xshell/PuTTY等. OpenSSH一般为 ...

  7. android studio项目提交Git@OSC

    转载地址:http://www.bubuko.com/infodetail-977061.html 先到git.oscchina.net网站上申请个账号,然后创建一个项目.过程不再说了. 新建工程后, ...

  8. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:2.技术简介之MinaFilter(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Filter filter:过滤器?(不知道是不是这么翻译,算了知道意思就好了╮(╯▽╰)╭),这种东西在很多语言中 ...

  9. CF 55D Beautiful numbers (数位DP)

    题意: 如果一个正整数能被其所有位上的数字整除,则称其为Beautiful number,问区间[L,R]共有多少个Beautiful number?(1<=L<=R<=9*1018 ...

  10. Linq语法学习_增删篇。

    关键词: select from where in into join on equals orderby descending thenby Table<TEntity> Default ...