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 反思总结
重来重来,刚刚就当什么都没发生 今天的题属实有些迷惑,各种意义上…总之都很有难度吧.不满归不满,这套题的确不是什么没有意义的题目. 为了考验自己的学习能力记忆力,决定不写题解,扔个代码完事了 其实是懒 ...
随机推荐
- PAT甲级——A1141 PATRankingofInstitution【25】
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...
- JS的常用正则表达式 验证密码用户名等
//校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return false retur ...
- docker-compose的scale的用法
用到的三个文件 docker-compose version: " services: redis: image: redis web: build: context: . dockerfi ...
- 分布式ID生成器的解决方案总结
在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要 ...
- python之字符串中插入变量
方法一:也是 比较好用的,功能教齐全 s="{name} is {sex}" print(s.format(name="zzy",sex="girl& ...
- teb教程2
http://wiki.ros.org/teb_local_planner/Tutorials/Inspect%20optimization%20feedback 检查优化反馈 简介:怎样检查优化的轨 ...
- std::wcout输出1遍不输出
std::wcout输出1遍不输出 程序明明在执行地方执行 wcout无法输出到控制台 cout就可以 添加中文支持即可
- Java基本数据类型的类型转换规则
基本类型转换分为自动转换和强制转换. 自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可 以说低级自动向高级转换.这儿的容量指的不是字节数,而是指类型表述的范围. 强制转换规则:高级变 ...
- liunx下在线安装mysql
一:在线安装mysql 1.首先检测一下,mysql之前有没有被安装 命令:rpm -qa | grep mysql 2.删除mysql的命令: rpm -e --nodeps `rpm -qa | ...
- 启动AutoCAD时自动加载.NET开发的DLL
程序组织,建立名为*.bundle的文件夹,创建Contents子文件夹,并将dll,ico等文件放进Contents中,在*.bundle中创建PackageContents.xml文件,内容如下: ...