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 反思总结
重来重来,刚刚就当什么都没发生 今天的题属实有些迷惑,各种意义上…总之都很有难度吧.不满归不满,这套题的确不是什么没有意义的题目. 为了考验自己的学习能力记忆力,决定不写题解,扔个代码完事了 其实是懒 ...
随机推荐
- CF914D
CF914D 用线段树乱搞一下就行qwq #include<iostream> #include<cstring> #include<cstdio> #includ ...
- Json解析之FastJson
版权声明:转载请注明出处 https://blog.csdn.net/heqiangflytosky/article/details/37659943 1.FastJson介绍 FastJson是阿里 ...
- vue做一个上移和下移,删除的li 功能
效果图: 思路就是冒泡原理,把数据放到一个空数组,对其进行排序, 单选框用到的是iview . 具体实现代码: <div v-for="item in singledLists&quo ...
- android中的Serveice组件
创建 配置 Service: 1.定义一个继承了Service类的子类 2.在 AndroidManifest.xml清单文件中对开发的Service进行配置 Service和Activity很相似, ...
- 七牛云关联Windows图床
1. 注册七牛云 七牛云 地址,需要在这里进行注册 2.完成实名认证 需要上传身份证的正反面以及支付宝做一下认证即可. 首先进入个人中心 然后进行实名认证 由于我已经认证过了,所以显示认证完成,未认证 ...
- 函数的atguments
在调用函数时,浏览器每次都会传递进两个隐含的参数: 1.函数的上下文对象this 2.封装实参的对象arguments arguments是一个类数组对象,它也可以用过索引来操作数据,也可以获取长度 ...
- Codeforces 1163F 最短路 + 线段树 (删边最短路)
题意:给你一张无向图,有若干次操作,每次操作会修改一条边的边权,每次修改后输出1到n的最短路.修改相互独立. 思路:我们先以起点和终点为根,找出最短路径树,现在有两种情况: 1:修改的边不是1到n的最 ...
- 我的浏览器标签同步方案:坚果云+Floccus
前言 floccus github地址: https://github.com/marcelklehr/floccus Floccus插件是一款浏览器书签收藏同步插件,支持Chrome和Firefox ...
- 【性能-windows端口限制】TPS上不去,应用无压力只有cpu5%,tomcat线程最高1500,增大并发出现connect 报错
现象:TPS上不去,应用无压力只有cpu5%,tomcat线程够用最高1500,增大并发出现connect 报错 原因:windows端口不够用了,或者不够回收了 解决方案: 1.运行-regedit ...
- leetcode-168周赛-1297-子串的最大出现次数
题目描述: 自己的提交: class Solution: def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) ...