给一个串,让你找一个子串,形如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. PageRank简单实现中的一个错误

    在我的一篇博客PageRank中,在5.1 算法实现中简单实现部分原本是有一个错误的.这个错误也体现出我当时对PageRank算法有理解上的偏差. 这是个什么样的错误呢?是这样的: 简单实现中计算每个 ...

  2. Tomcat8.5配置https启动报空指针错误

    tomcat8.5版本和tomcat8.0有了很大的区别,默认的server.xml中https的配置方式也有了变化: <Connector port="8443" prot ...

  3. 支付宝app支付流程

  4. 配置Arcengine10.1+java开发环境(Eclipse)

    以下开发环境配置是假定用户已经安装了Java开发的IDE(Eclipse) 软件准备 (一)ArcEngine 10.1 安装包 提取码:poa0 (二)ArcGIS License Manager ...

  5. QLabel-标签控件的应用

    label = QLabel('我是李明') #创建标签控件对象.参数:标签中要显示的文本 label.setText('我是明明') 修改标签控件显示的文本 self.label.text() 返回 ...

  6. JavaScript之创建动态脚本

    //option= {type,src,text,isCreateScriptBySrc} function createDynamicScript(option){ var script = doc ...

  7. Java SE关键字-static

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员 ...

  8. DjangoAdmin自定义过滤器

    class UserIDFilter(admin.SimpleListFilter): # 自定义用户查询过滤器 title = _('关联用户') parameter_name = 'user_id ...

  9. django学习~models之查询

    一 简介:今天学习models查询的一些东西 二 理解概念 Queryset 定义 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet 三 细节学习 一 常用的models函数 . ...

  10. Django 利用 Pagination 简单分页

    Django自身提供了一些类来实现管理分页,数据被分在不同的页面中,并带有“上一页/下一页”标签.这个类叫做Pagination,其定义位于 django/core/paginator.py 中. 一 ...