原理:

不给予证明啦(懒得一批

但是代码中有给还算详细的注释

参考:https://www.cnblogs.com/yjiyjige/p/3263858.html

模板题:

洛谷P3375:

https://www.luogu.org/problemnew/show/P3375

代码:

#include<iostream>
#include<cstring>
#define MAXN 1000010
using namespace std;
char a[MAXN],b[MAXN];
int next[MAXN];
int la,lb,j; //j为所匹配到的最大的后缀的前缀最后一位
int main()
{
cin>>a+;//从一开始存
cin>>b+;
la=strlen(a+);
lb=strlen(b+);
for(int i=;i<=lb;i++)//匹配匹配串
{
while(j&&b[j+]!=b[i])//判j不为零因为在第一位就不用往前找了
//如果不匹配就往前找
j=next[j];
if(b[j+]==b[i])//匹配就往下推
j++;
next[i]=j;
}
j=;
for(int i=;i<=la;i++)//匹配文本串 同上
{
while(j&&b[j+]!=a[i])
j=next[j];
if(b[j+]==a[i])
j++;
if(j==lb)//找到一个匹配串输出位置
cout<<i-lb+<<endl;
}
for(int i=;i<=lb;i++)
cout<<next[i]<<" ";
}

后记:

培训D2T3考到了KMP

上午也有讲思路

但是身为蒟蒻会思路不会代码啊

直接放弃了T3打前面的两题

晚上又花了一点时间理解

打完了这个板子

【字符串】跳来跳去的KMP匹配的更多相关文章

  1. 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)

    题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...

  2. kmp匹配详解

    字符串算法都是毒瘤的 一.kmp算法的用处 在文本串中查找模式串的位置,数量 文本串:要在这个字符串查找模式串 模式串:在文本串中查找的字符串 全是废话 二.kmp算法的思想 话说kmp好像是3个发明 ...

  3. BNUOJ-26580 Software Bugs KMP匹配,维护

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26580 题意:给一个模式串,然后m个匹配串,要求删掉匹配串中的所有存在的模式串,使得余下的 ...

  4. 1.3 正则表达式和Python语言-1.3.5使用 search()在一个字符串中查找模式(搜索与匹配 的对比)

    1.3.5 使用 search()在一个字符串中查找模式(搜索与匹配的对比) 其实,想要搜索的模式出现在一个字符串中间部分的概率,远大于出现在字符串起始部分的概率.这也就是 search()派上用场的 ...

  5. 常用算法3 - 字符串查找/模式匹配算法(BF & KMP算法)

    相信我们都有在linux下查找文本内容的经历,比如当我们使用vim查找文本文件中的某个字或者某段话时,Linux很快做出反应并给出相应结果,特别方便快捷! 那么,我们有木有想过linux是如何在浩如烟 ...

  6. 不区分大小写匹配字符串,并在不改变被匹配字符串的前提下添加html标签

    问题描述:最近在搭建一个开源平台网站,在做一个简单搜索的功能,需要将搜索到的结果中被匹配的字符串添加不一样的颜色,但是又不破坏被匹配的字符串. 使用的方法是替换被匹配的字符串加上font标签.但是搜索 ...

  7. 域名ip自动跳转 跳转指定页面的js

    域名ip自动跳转 跳转指定页面的js 为了应对百度审核,需要客户的网站在个别地区跳转到另一个页面,就搞到了这段代码,屡试不爽,超实用.下面把地址换成你要访问的网站url地址或者文件url地址即可.超实 ...

  8. 流动python - 字符串KMP匹配

    首先我们看一下简单的字符串匹配. 你可以把文本字符串s固定,模式字符串p从s对齐的左边缘,作为承担部分完全一致,匹配成功,失败将是模式字符串p整体向右1地点,继续检查对齐部分,重复. #朴素匹配 de ...

  9. 字符串截取模板 && POJ 3450、3080 ( 暴力枚举子串 && KMP匹配 )

    //截取字符串 ch 的 st~en 这一段子串返回子串的首地址 //注意用完需要根据需要最后free()掉 char* substring(char* ch,int st,int en) { ; c ...

随机推荐

  1. 九度oj题目1518:反转链表

    题目1518:反转链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2567 解决:948 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) ...

  2. Js内存泄漏的几种情况

    想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...

  3. 白话SpringCloud | 第五章:服务容错保护(Hystrix)

    前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用.在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如 ...

  4. fabric省略输出

    fab -f test_fabric.py start --hide status,running,stdout,user,aborts,warnings,stderr 省略所有输出--hide st ...

  5. [LeetCode]27. Remove Element移除元素

    Given an array nums and a value val, remove all instances of that value in-place and return the new ...

  6. 1.HTML小结

    HTML 基本文档 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. webstrom 在脚本区域写其他语言得到语法提示

    webstrom 在脚本区域写其他语言得到语法提示 webstrom 的提示小灯泡 点击inject language or reference 选择相应的语言. 如果写的内容比较多, 可以按照web ...

  8. jQuery源码分析系列(版本1.9 - 1.10)

    jQuery是我们常用的javascript库,我们应该不仅要会用它还要知道它的工作原理. 1.jQuery结构及$方法的工作原理 2.对回调函数操作的Callbacks对象 3.promise规范的 ...

  9. Stage5--Python GUI编程TKinter

    Python图形库简要介绍 python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准 ...

  10. mvc4 坑啊

    昨天下午出了个BUG.到今天上午才解决掉.就是mvc页面的属性名跟controller 中action 参数的名相同.导致action无法取得前台的值.这个问题浪费了很多时间.命名要规范. 如 页面 ...