PKU 1226 Substrings(字符串匹配+暴搜KMP模板)
原题大意:原题链接
给出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模板)的更多相关文章
- 模式字符串匹配问题(KMP算法)
这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...
- 神奇的字符串匹配:扩展KMP算法
引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...
- 【字符串匹配】UVALive 4670 模板题
给一个文本T,和n个模板字符串,都是由小写字母组成,问这些字符串那些在字符串中出现的次数最多,输出最多的次数以及相应的字符串. AC自动机的模板题,递归输出的时候改成累加次数统计数组cnt即可. 大白 ...
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
- P3375 【模板】KMP字符串匹配
P3375 [模板]KMP字符串匹配 https://www.luogu.org/problemnew/show/P3375 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在 ...
- P3375【模板】KMP字符串匹配
前言: 额……很久以前就写了KMP模板(只是半知不解),话说看完了manacher,再回过头看KMP,是真TM简单啊!字符串专题整体较抽象,所以必须牢记思路并时常复习 题目描述 如题,给出两个字符串s ...
- 洛谷—— P3375 【模板】KMP字符串匹配
P3375 [模板]KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如 ...
- KMP字符串匹配 模板 洛谷 P3375
KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...
随机推荐
- localStorage变更事件当前页响应新解-awen
html5的localStorage相信大家都是很熟悉了,但是在chrome等支持该对象的浏览器中(ie10除外),如果你监听storage变更事件你就会发现,当数据发生变化时本页是监听不到stora ...
- 提高ASP.NET网站性能的方法
http://www.360doc.com/content/14/0705/18/7662927_392224856.shtml Asp.NET有许多秘密,当你了解了这些秘密后,可以使得你的ASP ...
- Android 将时间戳转为代表"距现在多久之前"的字符串
public String getStandardDate(int dateTime) { StringBuffer sb = new StringBuffer(); long t = Long.pa ...
- js如何计算当前日期的前一个月和后一个月?
<div class="query_title_div"><img src="../../images/task/before.png"/&g ...
- 170314、工具:apache httpClient多线程并发情况下安全实用及工具类分享
简单用法介绍:介绍来源网络 建立连接:在HttpClient中使用多线程的一个主要原因是可以一次执行多个方法.在执行期间,每一个方法都使用一个HttpConnection实例.由于在同一时间多个连接只 ...
- 160517、nginx负载均衡详解
1:什么是负载均衡 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用.最大化吞吐率. ...
- HDU 1866 A + B forever!
A + B forever! Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Code Forces 645A Amity Assessment
A. Amity Assessment time limit per test2 seconds memory limit per test256 megabytes inputstandard in ...
- oracle导入TXT文件
oracle导入TXT文件: 1.建好对应的表和字段:2.新建test.ctl文件,用记事本编辑写入: OPTIONS (skip) load data INFILE 'E:\8080.txt' -- ...
- 1.1 VGA(图像显示卡),Graphics Card(图形加速卡),Video Card(视频加速卡),3D Accelerator Card 和 GPU(图形处理器)
1.1 VGA(图像显示卡),Graphics Card(图形加速卡),Video Card(视频加速卡),3D Accelerator Card 和 GPU(图形处理器) 对这些概念之前也没怎么了解 ...