原题大意:原题链接

给出n个字符串,找出一个最长的串s,使s或者s的反转字符串(只要其中一个符合就行)同时满足是这n个串的子串。

对于样例,第一组ABCD   BCDFF  BRCD最长的串就是CD;第二组rose  orchid最长的子串就是ro

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char str[][];
int next[],rnext[]; /*
void get_next(char *s)
{
next[1]=0;
int i=1,j=0;
int slen=strlen(s);
while(i<slen){
if(j==0||s[i-1]==s[j-1]){
i++,j++;
next[i]=j;
}
else j=next[j];
}
}
在t字符串在s字符串中匹配
bool KMP(char *s,char *t)
{
int i=0,j=1;
int slen=strlen(s),tlen=strlen(s);
while(i<=slen&&j<=tlen){
if(j==0||s[i-1]==t[j-1])
i++,j++;
else j=next[j];
}
if(j>tlen)
return true;
return false;
}
*/
void get_next(int l,int r,bool flag)
{
if(flag){
next[l]=l-;
int i=l,j=l-;
while(i<r){
if(j==l-||str[][i]==str[][j]){
i++,j++;
next[i]=j;
}
else j=next[j];
}
}
else{
rnext[r]=r+;
int i=r,j=r+;
while(i>l){
if(j==r+||str[][i]==str[][j]){
i--,j--;
rnext[i]=j;
}
else j=rnext[j];
}
}
}
//将第一个字符串的l~r位置在第k个字符串中进行匹配
bool KMP(int id,int l,int r,bool flag)
{
int len=strlen(str[id]);
if(flag){
int i=,j=l;
while(i<len&&j<=r){
if(j==l-||str[id][i]==str[][j])
i++,j++;
else j=next[j];
}
if(j>r) return true;
}
else{
int i=,j=r;
while(i<len&&j>=l){
if(j==r+||str[id][i]==str[][j])
i++,j--;
else j=rnext[j];
}
if(j<l) return true;
}
return false;
} int main()
{
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%s",str[i]);
int len=strlen(str[]),ans=;
for(int i=;i<len;i++){
for(int j=i;j<len;j++){
int len=j-i+;
get_next(i,j,true);
get_next(i,j,false);
int cnt=;
for(int k=;k<n;k++){
if(KMP(k,i,j,true)||KMP(k,i,j,false))
cnt++;
else break;
}
if(cnt==n&&ans<len) ans=len;
}
}
printf("%d\n",ans);
}
return ;
}

PKU 1226 Substrings(字符串匹配+暴搜KMP模板)的更多相关文章

  1. 模式字符串匹配问题(KMP算法)

    这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...

  2. 神奇的字符串匹配:扩展KMP算法

    引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...

  3. 【字符串匹配】UVALive 4670 模板题

    给一个文本T,和n个模板字符串,都是由小写字母组成,问这些字符串那些在字符串中出现的次数最多,输出最多的次数以及相应的字符串. AC自动机的模板题,递归输出的时候改成累加次数统计数组cnt即可. 大白 ...

  4. Luogu 3375 【模板】KMP字符串匹配(KMP算法)

    Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...

  5. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

  6. P3375 【模板】KMP字符串匹配

    P3375 [模板]KMP字符串匹配 https://www.luogu.org/problemnew/show/P3375 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在 ...

  7. P3375【模板】KMP字符串匹配

    前言: 额……很久以前就写了KMP模板(只是半知不解),话说看完了manacher,再回过头看KMP,是真TM简单啊!字符串专题整体较抽象,所以必须牢记思路并时常复习 题目描述 如题,给出两个字符串s ...

  8. 洛谷—— P3375 【模板】KMP字符串匹配

    P3375 [模板]KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如 ...

  9. KMP字符串匹配 模板 洛谷 P3375

    KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...

随机推荐

  1. JavaScript的parseint()函数

    定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必选项.要转换为数字的字符串. radix 可 ...

  2. hdu 2196(求树上每个节点到树上其他节点的最远距离)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路:首先任意一次dfs求出树上最长直径的一个端点End,然后以该端点为起点再次dfs求出另一个 ...

  3. C#------SortedLIst键值对的使用方法

    方法: SortedList sf = new SortedList(); sf.Add(, "广州"); sf.Add(, "江门"); sf.Add(, & ...

  4. IOS 开发之--获取真机的deviceToeken

    获取真机的devicetoken的方法: #pragma mark 注册APNs成功并上报DeviceToken - (void)application:(UIApplication *)applic ...

  5. SQL Server计算列

    计算列由可以使用同一表中的其他列的表达式计算得来.表达式可以是非计算列的列名.常量.函数,也可以是用一个或多个运算符连接的上述元素的任意组合.表达式不能为子查询. 例如,在 AdventureWork ...

  6. SQL Server中的SQL语句优化与效率

    很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhan ...

  7. Thymeleaf模板如何获取springMVC返回的model值

    Thymeleaf模板如何获取springMVC返回的model值 后台的实现: @RequestMapping("/hello") public String hello(Mod ...

  8. Spring的Bean的生命周期以及Bean的后置处理器

    Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...

  9. 第十一课——codis-server的高可用,对比codis和redis cluster的优缺点

    [作业描述] 1.配置codis-ha 2.总结对比codis的集群方式和redis的cluster集群的优缺点 =========================================== ...

  10. 20165330 实验一 Java开发环境的熟悉

    一.实验内容及步骤 使用JDK编译.运行简单的Java程序 使用命令 cd 20165330 进入到学号目录下 mkdir exp1新建文件夹 mkdir bin src建立bin src目录 vim ...