KMP2
poj 2752
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int max_=4e5+;
char str[max_];
int ans[max_],nex[max_];
int tot;
void getnext(int n)
{
int i=,k=-;
nex[]=-;
while(i<n)
{
while(k>-&&str[k]!=str[i])
k=nex[k];
nex[++i]=++k;
}
}
void solve(int n)
{
int i=n;
tot=;
while(i>-)
{
if(str[i-]==str[n-])
ans[++tot]=i;
i=nex[i];
}
}
int main()
{
while(gets(str))
{
int len=strlen(str);
getnext(len);
solve(len);
for(int i=tot;i>=;i--)
{
printf("%d ",ans[i]);
}
printf("\n");
}
}
poj 3080
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
const int N=+,max_=+;
string s[N];
int nex[max_];
void getnext(string str)
{
int n=str.size();
int i=,k=-;
nex[i]=k;
while(i<n)
{
while(k>-&&str[i]!=str[k])
k=nex[k];
nex[++i]=++k;
}
}
bool kmp(string str,string mo)
{
int n=str.size(),m=mo.size();
int i=,j=;
while(i<n&&j<m)
{
while(str[i]!=mo[j]&&j>-)
j=nex[j];
i++,j++;
}
if(j==m)
return ;
return ;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<n;i++)
cin>>s[i];
string ans="";
for(int j=;j<=s[].size();j++)
{
for(int i=;i+j<=s[].size();i++)
{
bool flag=;
string op=s[].substr(i,j);
getnext(op);
for(int ii=;ii<n;ii++)
{
if(kmp(s[ii],op)==)
{
flag=;
break;
}
}
if(!flag)
{
if(ans.size()<op.size())
ans=op;
else if(ans.size()==op.size())
ans=min(ans,op);
}
}
}
if(ans.size()>=)
cout<<ans<<endl;
else
cout<<"no significant commonalities"<<endl;
}
}
hdu 2594
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
const int max_=5e5+;
using namespace std;
char str[max_],mo[max_];
int nex[max_];
void getnext(int n)
{
int i=,k=-;
nex[i]=-;
while(i<n)
{
while(str[i]!=str[k]&&k>-)
k=nex[k];
nex[++i]=++k;
}
}
void solve(int n,int m)
{
int i=,j=;
while(j<m)
{
while(str[i]!=mo[j]&&i>-)
i=nex[i];
i++,j++;
// printf("%d\n",j);
}
if(i<=)
printf("0\n");
else
{
for(int ii=;ii<i;ii++)
printf("%c",str[ii]);
printf(" %d\n",i);
}
}
int main()
{
while(scanf("%s %s",str,mo)!=EOF)
{
// cout<<str<<endl<<mo<<endl;
int n=strlen(str);
int m=strlen(mo);
getnext(n);
solve(n,m);
}
}
KMP2的更多相关文章
- [日常训练]article
Description 小今天来写作文啦! 小非常善于堆砌辞藻.在洋洋洒洒写了一长篇之后,小发现作文中很多段落都似曾相识.小认为,如果一段字符在文章开头,结尾和中间都出现过,那么这段字符就可以被认为是 ...
- kmp算法详解
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
- 【算法Everyday】第三日 KMP算法
题目 你知道的. 分析 分析不来. 代码 void OutputArray(int* pArr, int iLen) { ; i < iLen; i++) { printf("%d\t ...
- KMP 模式串匹配 失去匹配的瞬间你还有什么
KMP: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法).KMP算法的关键 ...
- 《算法》第五章部分程序 part 5
▶ 书中第五章部分程序,包括在加上自己补充的代码,Knuth-Morris-Pratt 无回溯匹配,Boyer - Moore 无回溯匹配,Rabin - Karp 指纹匹配 ● Knuth-Morr ...
- 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...
- KMP算法的时间复杂度与next数组分析
一.什么是 KMP 算法 KMP 算法是一种改进的字符串匹配算法,用于判断一个字符串是否是另一个字符串的子串 二.KMP 算法的时间复杂度 O(m+n) 三.Next 数组 - KMP 算法的核心 K ...
- 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...
- 2019.10.22 csp-s模拟测试82 反思总结
重来重来,刚刚就当什么都没发生 今天的题属实有些迷惑,各种意义上…总之都很有难度吧.不满归不满,这套题的确不是什么没有意义的题目. 为了考验自己的学习能力记忆力,决定不写题解,扔个代码完事了 其实是懒 ...
随机推荐
- 关于char(M)和varchar(N)的区别
1.int(10)的10表示显示的数据的长度,不是存储数据的大小:chart(10)和varchar(10)的10表示存储数据的大小,即表示存储多少个字符. int(10) 10位的数据长度 9999 ...
- 手动安装easy-install/pip
1.wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py 2.在root用户下 python ez_setup.py -- ...
- multiple-cursors做代码对齐
multiple-cursors做代码对齐 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839 ...
- org-mode记录总结
org-mode记录总结 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} cod ...
- 项目中AOP的实例应用
其中包括了权限管理.表单验证.事务管理.信息过滤.拦截器.过滤器.页面转发等等. 公司项目的应用:(涉及用户验证登录以及用户是否有管理员权限.心理用户权限等),还有涉及的其他日志管理代码就不一一举例了 ...
- c数据结构的字符串查找的Brute-Force算法
#include<stdio.h> #include<malloc.h> #include<string.h> //定义字符串的结构体 typedef struct ...
- SiteMesh 2.X 的使用(网页结构模板)
SiteMesh是基于Servlet的filter的,即过滤流.它是通过截取reponse,并进行装饰后再交付给客户. 其中涉及到两个名词: 装饰页面(decorator page)和 "被 ...
- strings - 显示文件中的可打印字符
总览 (SYNOPSIS) strings [-a|-|--all] [-f|--print-file-name] [-o] [--help] [-v|--version] [-n min-len|- ...
- 负载均衡实现故障vip自动漂移
环境说明演示vip自动漂移 192.168.237.50 192.168.237.51 vip: 192.168.237.5 keepalived开源软件实现 keepalived可以实现当vip挂的 ...
- 每天一个Linux常用命令 cat命令
在Linux系统中,cat命令是一个文本输出命令,通常用来查看某个文档的内容.它有如下三个功能: 1.一次性显示整个文件 如:查看/etc/initab文件,可以使用命令:cat/etc/initta ...