复杂度 O(n+m)

这个博主写的蛮不错的 http://www.cnblogs.com/SYCstudio/p/7194315.html

1.本文中,所有的字符串从0开始编号
2.为了在程序中表示方便,在接下来的说明中,next[i]=0表示最长相同前缀后缀长度为1,即真实的最长相同前缀后缀=next[i]+1。(重要的内容要放大)

#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
char A[maxn],B[maxn];//A为主串 B为模式串
int len1,len2;//len1为A的长度 同理
int next[maxn];
int ans;
//得到next 数组
void get_next()
{
next[] =-;
for(int i=; i<len2 ;i++)
{
int j=next[i-];
while (B[j+] != B[i] && j>=)//不等就不断缩小长度 否则增加长度
j = next[j];
if(B[j+] == B[i])
next[i] =j+;
else
next[i] =-;
}
}
//利用next数组寻找匹配,这里我们是每找到一个匹配就输出其开始的位置
int kmp()
{
int i=,j=;
while (i < len1)
{
if(A[i] == B[j])
{
i++;j++;
if(j == len2)
{
printf("%d\n",i-len2);
j=next[j-]+;
}
}
else
{
if(j ==)
i++;
else
j= next[j-]+;
}
}
} int main ()
{
cin>>A>>B;
len1=strlen(A),len2=strlen(B);
get_next();
kmp();
//cout<< A[ans]<<endl;
}

KMP 初级板子 待更新的更多相关文章

  1. ACM - KMP题目小结 (更新中)

    KMP算法题型大致有两类,一类是next数组的应用,一类是匹配问题. next数组大多数是求字符串周期,或者是与前缀后缀有关,也可以应用在DP中.需要对next数组有一定理解才能做得出. next数组 ...

  2. KMP入门题目[不定期更新]

    HDU 1711 Number Sequence(模板题) #include <cstdio> ; ; int N, M; int textS[MAXN]; int tarS[MAXL]; ...

  3. [日常] NOIP前集训日记

    写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...

  4. GDOI2018滚粗记

    day-50: 高中全体成员去了北京训练,我被虐成傻逼(貌似总分全校倒数第2). day-20: 回广州了,间断式略微考好55555..... day0: 早上起床好像有点晚qwq 然后简单打了个FF ...

  5. NOIP2018 - 暑期博客整理

    暑假写的一些博客复习一遍.顺便再写一遍或者以现在的角度补充一点东西. 盛暑七月 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士 比较经典的基环外向树dp.可以借鉴的 ...

  6. POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)

    pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...

  7. 2018 ACM ICPC 南京赛区 酱油记

    Day 1: 早上6点起床打车去车站,似乎好久没有这么早起床过了,困到不行,在火车上睡啊睡就睡到了南京.南航离南京南站很近,地铁一站就到了,在学校里看到了体验坐直升机的活动,感觉很强.报道完之后去吃了 ...

  8. NOIP前计划

    距离NOIp还有13天 距离继续学/退役还有13天 是时候列一波计划了 1. 要学的东西 cdq分治(突然发现cdq分治不太行,而且说不定可以用来代替想不出来的数据结构题) 主席树(写的太少啦,不熟练 ...

  9. (转载)跟Classic ARM 处理器说拜拜——Atmel SAMA5D3 Xplained开发板评测

    2014 年 4 月 10 日 时间: 下午 3:15 作者: 幸得安然 电子产业的蓬勃发展带来了史无前例的生活.生产大跃进,但是,人们在享受发展喜悦的同时又不得不面临现实现状的囧境--在以移动电子设 ...

随机推荐

  1. 【Cocos2dx 3.3 Lua】SpriteBatchNode和SpriteFrameCache使用

    精灵帧缓存类 一.SpriteFrameCache     精灵帧缓冲类SpriteFrameCache用于存储精灵帧,SpriteFrameCache是一个单例模式,不属于某一个精灵,是所有精灵共享 ...

  2. C#集合中的Add与AddRange方法

    C#.NET的集合主要位于System.Collections和System.Collections.Generic(泛型)这两个namespace中. 1.System.Collections 比如 ...

  3. [LeetCode] 787. Cheapest Flights Within K Stops_Medium tag: Dynamic Programming, BFS, Heap

    There are n cities connected by m flights. Each fight starts from city u and arrives at v with a pri ...

  4. iOS开发--底部按钮和应用图标显示未读消息

    我们要实现的效果如下: 我们使用系统自带的,实际上,代码量很少,在我们要显示的按钮上,打上下面一句代码即可: self.tabBarItem.badgeValue = @"1"; ...

  5. 第三章基本的SQl查询语言

    ---恢复内容开始--- ---恢复内容结束---

  6. Summary: Binary Search

    Iterative ways: int binarySearch (int[] a, int x) { int low = 0; int high = a.length - 1; int mid; w ...

  7. html5新元素练习(1)

    1, <nav>  是专门由于菜单导航,链接导航的元素 2,  <header> 主体页面的头部,与head不同,它的内容可以显示出来 3,  <footer>页面 ...

  8. ac1008

    这题说的是 给了n个点在圆 上 然后 i连 i+2 从i+2 开始连 i+4  然后 这样一直到某个点 已经被连过为止   如果还有的没有被连过 就从那个点开始 连 按照上面的规则 当 N大于6 的时 ...

  9. HIT 2051

    这题说的是 一辆汽车 每走一单位的距离就消耗一单位的燃料,然后,他要回城里去,当然他与城镇之间有n个加油站 ,他的油箱可以为 无穷大 ,这样分析后发现进不进汽油站 与 汽油站在哪无关 ,只与加油站的 ...

  10. Hive 常用优化参数

    常用调优测试语句 :    ①显示当前hive环境的参数值: set 参数名; 如:   hive> set mapred.map.tasks;mapred.map.tasks;   ②设置hi ...