给一个串,让你找一个子串,形如EAEBE,就是一个串在开头结尾中间各出现一次,问这个E最长是多少

Sample Input
5
xy
abc
aaa
aaaaba
aaxoaaaaa

Sample Output
0
0
1
1
2

 # include <cstdio>
# include <cstring>
using namespace std; char S[] ;
int next[] ;
int slen ;
int tlen ; void getNext()
{
int j, k;
j = ; k = -; next[] = -;
while(j < slen)
if(k == - || S[j] == S[k])
next[++j] = ++k;
else
k = next[k]; } int main ()
{
int T ;
scanf("%d" , &T);
while (T--)
{
scanf("%s" , S) ;
slen = strlen(S) ;
getNext() ;
int t = slen ;
int ans = ;
while (t > slen/)
t = next[t] ;
while(t)
{
tlen = t ;
int i ;
int flag = ; for(i = t* ; i <= slen - t ; i++)//利用next数组的性质
{
if (next[i] == tlen)
{
ans = tlen ;
flag = ;
break ;
}
}
if (flag)
t = next[t] ;
else
break ;
}
printf("%d\n" , ans) ; } return ;
} # include <cstdio>
# include <cstring>
using namespace std; char S[] ;
int next[] ;
int slen ;
int tlen ; void getNext()
{
int j, k;
j = ; k = -; next[] = -;
while(j < slen)
if(k == - || S[j] == S[k])
next[++j] = ++k;
else
k = next[k]; } bool kmp(int a , int b)
{ int i, j = ; for(i = a; i <= b; i++)
{
while(j > && S[i] != S[j])
j = next[j];
if(S[i] == S[j])
j++;
if(j == tlen)
{
return true ;
}
}
return false;
} int main ()
{
int T ;
scanf("%d" , &T);
while (T--)
{
scanf("%s" , S) ;
slen = strlen(S) ;
getNext() ;
int t = slen ;
int ans = ;
while (t > slen/)
t = next[t] ;
while(t)
{
tlen = t ;
int flag = kmp(t ,slen - t - ) ;//查看模式串是否匹配主串
if (flag)
{
ans = t ;
break ;
}
t = next[t] ;
}
printf("%d\n" , ans) ; } return ;
}

HDU 4763 求最大长度的串A,使得S满足APAQA的更多相关文章

  1. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  2. C++ 数组长度 以及 数组名作为参数传递给函数 以及 为什么不在子函数中求数组长度

    在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有 ...

  3. 求任意长度数组的最大值(整数类型)。利用params参数实现任意长度的改变。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 求字符串长度 strlen(数组指针两种方式)

    问题: 求字符串中所含有字符的个数(包括空格),即求字符串长度: #include <stdio.h> #include <assert.h> int _strlen(cons ...

  5. HDU 5008 求第k小子串

    本题要求第k小的distinct子串,可以根据height数组,二分出这个第k小子串所在后缀的位置信息.由于题目要求子串起始下标尽可能小.所以再在rank数组中,二分出与当前后缀LCP大于等于所求子串 ...

  6. C陷阱:求数组长度

    // 这是一篇导入进来的旧博客,可能有时效性问题. 程序中,当我们建立了一个int型数组:int a[]={1,2,3,4,5,6};随后我们可能需要知道它的长度,此时可以用这种方法:length = ...

  7. Java50道经典习题-程序38 求字符串长度

    题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. import java.util.Scanner; public class Prog38 { public stat ...

  8. JAVA 基础编程练习题38 【程序 38 求字符串长度】

    38 [程序 38 求字符串长度] 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. package cskaoyan; public class cskaoyan ...

  9. Java例题_38 自定义函数求字符串长度

    1 /*38 [程序 38 求字符串长度] 2 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个字符串 7 ...

随机推荐

  1. JAVA记录-SpringMVC国际化配置

    1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...

  2. bootstrap3 input 验证样式【转】

    feedback <form role="form"> <div class="form-group has-success has-feedback& ...

  3. Dubbo集群容错

    转自dubbo官网文档http://dubbo.apache.org/zh-cn/blog/dubbo-cluster-error-handling.html Design For failure 在 ...

  4. epoll讲解--转自知乎

    Ctrip AIO底层使用epoll https://blog.csdn.net/z69183787/article/details/52943637 首先我们来定义流的概念,一个流可以是文件,soc ...

  5. 字典(Dictionary)

    字典(Dictionary) 字典是一种可变的容器模型,由键值对组成,键和值用冒号分隔,用花括号括起来: d = {key1 : value1, key2 : value} 字典的值可以是任何类型的数 ...

  6. java程序在windows后台执行的办法

    1.新建run.txt文件 2.在文件中输入一下内容: @echo off start javaw -jar xx.jar exit 3.保存,修改文件名为run.bat4.双击即可 5.删除wind ...

  7. .net 加密与解密

    public class Encrypts { /// <summary> /// 构造方法 /// </summary> public Encrypts() { } /// ...

  8. Linux之常识小结[版本]

    1 linux内核版本 major.minor.patchlevel 主版本号.次版本号.修补次数 次版本号的意义:偶数稳定版,奇数不稳定版 注意:查看系统版本信息 方法1.uname -a 方法2. ...

  9. js 判断身份证好是否合法

    function cidInfo(sId){ var info="" //if(!/^\d{17}(\d|x)$/i.test(sId))return false; sId=sId ...

  10. Delphi基础必记-快捷键

    快捷键: F12 代码窗口/窗体之间切换Ctrl + Shift + F 查找文件 Ctrl + Shift + G 为接口加入新的GUIDF4 运行到光标位置 F5 设置/取消断点 或用光标点击F7 ...