KMP
文章平均质量分 63
你的微笑依然那样灿烂
这个作者很懒,什么都没留下…
展开
-
poj 3461
#include#include#include#includeusing namespace std;const int maxn = 1000001;char text[maxn];//文本串char pattern[maxn];//模式串int nnext[maxn];//next数组.直接起next可能会跟系统中预定的重名/*O(m)的时间求next数组*/v原创 2017-02-18 21:58:57 · 409 阅读 · 0 评论 -
poj 2406 Power Strings(KMP)
Power Strings(pku 2406)给定两个字符串 a和b,我们定义 a*b为两个字符串的联接。例如,a = "abc" 且 b = "def",则a*b = "abcdef"。把这个定义的运算看做多项式,则一个字符串的非负整数次幂定义如下: a^0 = "" (一个空字符串) 且 a^(n+1) = a*(a^n)。输入:每个测试样例为一行,即一个字符串s,其长原创 2017-03-05 12:44:05 · 405 阅读 · 0 评论 -
poj 3461 Oulipo(KMP)
Oulipo(pku 3461)法国作家Georges Perec (1936–1982)曾写过一本书《La disparition》,这本书里没有一个字母‘e’。他是Oulipo组织中的一名成员。下面这段话引自这本书:Tout avait Pair normal, mais tout s’affirmait faux. Tout avait Fair normal, d’abord, p原创 2017-03-05 12:47:58 · 341 阅读 · 0 评论 -
KMP求前缀函数(next数组)
前缀函数主要是求出模式串中的next数组,那么什么是模式串呢?模式串模式串的概念很简单。举个例子:“给出一个字符串 T,再给出 n 个字符串 S1、S2...Sn,问 S1、S2...Sn 中有哪些是 T 的子串?”在这个例子中,S1、S2...Sn 便是 n 个模式串,T便是被匹配串。模式串是用来与被匹配串匹配的。next数组的主要意义是:若模式串 P 的前 i 个字符组成的子串为S,那原创 2017-03-28 16:20:05 · 988 阅读 · 0 评论 -
KMP
【KMP算法的引入】 既然知道了传统算法的不足之处,就要对症下药,优化这个冗余的检测算法。 KMP算法就能很好地解决这个冗余问题。 其主要思想为: 在失配后,并不简单地从目标串下一个字符开始新一轮的检测,而是依据在检测之前得到的有用信息(稍后详述),直接跳过不必要的检测,从而达到一个较高的检测效率。原创 2017-03-28 16:22:57 · 276 阅读 · 0 评论 -
[Gym-101341B](KMP)(水)Pursuing the Happiness
求一个串中是否有happiness,如果有,交换两个字符,是否还能找到happiness,如果还能,输出NO,否则输出YES,然后输出交换的两个字符的下标,情况不唯一。水题一道,当时写时,数组开小了一倍,runtime error on test 14 好多次,一脸蒙逼。。。代码写的很冗长,思路很简单。分情况讨论,ans==0时,找交换的两个位ans==1时,直接交换pos和p原创 2017-05-05 13:38:50 · 519 阅读 · 0 评论 -
hdu 5510 strstr/find/KMP
HDU-5510-BazingaProblem Description For n given strings S1,S2,⋯,Sn, labelled from 1 to n, you should find the largest i (1≤i≤n) such that there exists an integer j (1 ≤ j A substring of a原创 2017-06-16 20:37:50 · 393 阅读 · 0 评论 -
求两个字符串的(连续的)最长公共子串
转载请注明出处http://blog.csdn.net/MonkeyAndy问题:给出两个字符串,求出这两个字符串的连续的最长公共子序列例如 : char* a="aocdfacddcdfe"; char* b="pmcdfacdfe";连续的最长公共子序列为 “cdfacd”问题分析:思路及算法流程:1、以a串转载 2017-08-20 21:39:03 · 818 阅读 · 0 评论 -
2017多校联合第四场/HDU 6068 Classic Quotation(kmp+dp)
Description 给出一个长度为n的字符串S和一个长度为m的字符串T,有q次查询,每次查询给出一个区间[L,R],求对所有1Input 第一行一整数T表示用例组数,每组用例首先输入三个整数n,m,q分别表示S串串长和T串串长以及查询次数,之后输入串S和串T,两个串均由小写字母构成,最后q行每行输入两个整数L,R表示一次查询 (1Output 对于每次查询,输出查询结果转载 2017-08-31 19:54:39 · 293 阅读 · 0 评论 -
poj 2752Seek the Name,Seek the Fame(KMP)
Seek the Name,Seek the Fame(pku 2752)小猫非常有名,许多夫妇翻山越岭来到Byteland为了求小猫给他们新出生的孩子赐一个名字。为了应付这项无聊的工作,具有创新精神的小猫想到了一个简单却很神奇的程序:第一步:将父亲和母亲的名字连接在一起得到一个新的字符串S。第二部:找到一个S的子串作为前缀-后缀字符串。所谓前缀-后缀字符串即S的子串不仅是S的前缀又是S的原创 2017-03-05 12:05:36 · 363 阅读 · 0 评论 -
KMP算法
KMP算法9.1.1 简单模式匹配先举一个简单模式匹配的例子。给定字符串 , ,判断T是不是S的子串。用简单模式匹配来解决这个问题,过程如图9.1。 在简单模式匹配过程中,分别利用计数指针i和j指示主串S和模式串T中当前正待比较的位置。该匹配过程的基本思想是:从主串的pos位置的字符起和模式的第一个字符比较,若相等,则继续逐个比较后续字符;否则从主串的下一个字符位置起重新和原创 2017-03-05 12:03:14 · 513 阅读 · 0 评论 -
poj 2752
#include#includechar s[400005];int next[400005],sta[400005],all;void get_next(){ int len=strlen(s+1),i=1,j; next[1]=j=0; while(i<=len) { if(j==0||s[i]==s[j]) next[++i]=++原创 2017-02-18 21:59:55 · 242 阅读 · 0 评论 -
hdu 2087
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;/*char t[100原创 2017-02-18 22:01:06 · 375 阅读 · 0 评论 -
poj 2406
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;char a[10000原创 2017-02-18 22:02:27 · 236 阅读 · 0 评论 -
hdu 1711
#include#include#includeusing namespace std;int a[1000005],b[10005];int Next[10005];int n,m;int kmp(){ int i,j; j = 0; int tm = Next[0] = -1; while(j<m-1){ if(tm<0||b[j原创 2017-02-18 22:03:41 · 303 阅读 · 0 评论 -
hdu 1358
#include #include #include char str[1000005]; int next[1000005]; void getnext() { int i = 0,j = -1; memset(next,0,sizeof(next)); next[0] = -1; while (str[i原创 2017-02-18 22:04:37 · 313 阅读 · 0 评论 -
hdu 2594
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;#define Size原创 2017-02-18 22:05:36 · 347 阅读 · 0 评论 -
扩展KMP的模版
#include stdio.h> #include stdlib.h> #include string.h> #include iostream> #include algorithm> using namespace std; const int maxn=100005; int next[maxn],extand[maxn]; char S[m原创 2017-03-01 16:35:49 · 242 阅读 · 0 评论 -
KMP模板
int next[N]; char str1[M],str2[N]; //str1 长,str2 短 //len1,len2,对应str1,str2的长 void get_next(int len2) { int i = 0,j = -1; next[0] = -1; while(i<len2) { if原创 2017-02-22 14:32:47 · 322 阅读 · 0 评论 -
KMP · 扩展KMP · Manacher 专题
涉及到的知识点:KMP,扩展KMP,Manacher算法,最小最大表示牢记住:next[i]表示前i个字符所组成的字符串的最大前后缀匹配长度。Number Sequencehttp://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#problem/判断一个字符串是否在另一个字符串中出现,如果出现,则输出转载 2017-09-11 20:33:20 · 342 阅读 · 0 评论