原题大意:原题链接

给出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. PWA(Progressive Web App)入门系列:(一)PWA简单介绍

    前言 PWA做为一门Google推出的WEB端的新技术,长处不言而喻.但眼下对于相关方面的知识不是非常丰富.这里我推出一下这方面的新手教程系列.提供PWA方面学习. 什么是PWA PWA全称Progr ...

  2. git 怎么看某个commit 修改的代码

    详细的更改: git show commitid 只列出文件名:git show --pretty="format:" --name-only commitid 转自: http: ...

  3. HttpHandler简单示例

    using System.Web; namespace MyWebApp { public class MyHttpHandler : IHttpHandler { public void Proce ...

  4. 多线程编程(三)--创建线程之Thread VS Runnable

    前面写过一篇基础的创建多线程的博文: 那么本篇博文主要来对照一下这两种创建线程的差别. 继承Thread类: 还拿上篇博客的样例来说: 四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程. ...

  5. 修改UE4的deriveddatacache目录位置,扩大C盘空间

    按照默认安装目录,UE4会装在C盘 C:\Program Files\Epic Games\UE_4.15 DerivedDataCache缓存目录在 C:\Users\你的用户名\AppData\L ...

  6. PE导入表分析

    A.dll 导入 B.dll 导出函数 A.dll 表内容 这个结构指向的B导出函数的地址 Hook这个位置 等同于 Hook B.dll导出函数

  7. [Gradle] 针对不同的项目类型应用不同的 findbugs 配置

    build.gradle in project root subprojects { subProject -> plugins.withId('com.android.application' ...

  8. 160426、JavaScript 秘密花园

    简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...

  9. java前后台开发之后台自动上传下载

    package downloadTest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputSt ...

  10. 遍历Map集合四中方法

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...