【字符串】跳来跳去的KMP匹配
原理:
不给予证明啦(懒得一批
但是代码中有给还算详细的注释
参考: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匹配的更多相关文章
- 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...
- kmp匹配详解
字符串算法都是毒瘤的 一.kmp算法的用处 在文本串中查找模式串的位置,数量 文本串:要在这个字符串查找模式串 模式串:在文本串中查找的字符串 全是废话 二.kmp算法的思想 话说kmp好像是3个发明 ...
- BNUOJ-26580 Software Bugs KMP匹配,维护
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26580 题意:给一个模式串,然后m个匹配串,要求删掉匹配串中的所有存在的模式串,使得余下的 ...
- 1.3 正则表达式和Python语言-1.3.5使用 search()在一个字符串中查找模式(搜索与匹配 的对比)
1.3.5 使用 search()在一个字符串中查找模式(搜索与匹配的对比) 其实,想要搜索的模式出现在一个字符串中间部分的概率,远大于出现在字符串起始部分的概率.这也就是 search()派上用场的 ...
- 常用算法3 - 字符串查找/模式匹配算法(BF & KMP算法)
相信我们都有在linux下查找文本内容的经历,比如当我们使用vim查找文本文件中的某个字或者某段话时,Linux很快做出反应并给出相应结果,特别方便快捷! 那么,我们有木有想过linux是如何在浩如烟 ...
- 不区分大小写匹配字符串,并在不改变被匹配字符串的前提下添加html标签
问题描述:最近在搭建一个开源平台网站,在做一个简单搜索的功能,需要将搜索到的结果中被匹配的字符串添加不一样的颜色,但是又不破坏被匹配的字符串. 使用的方法是替换被匹配的字符串加上font标签.但是搜索 ...
- 域名ip自动跳转 跳转指定页面的js
域名ip自动跳转 跳转指定页面的js 为了应对百度审核,需要客户的网站在个别地区跳转到另一个页面,就搞到了这段代码,屡试不爽,超实用.下面把地址换成你要访问的网站url地址或者文件url地址即可.超实 ...
- 流动python - 字符串KMP匹配
首先我们看一下简单的字符串匹配. 你可以把文本字符串s固定,模式字符串p从s对齐的左边缘,作为承担部分完全一致,匹配成功,失败将是模式字符串p整体向右1地点,继续检查对齐部分,重复. #朴素匹配 de ...
- 字符串截取模板 && POJ 3450、3080 ( 暴力枚举子串 && KMP匹配 )
//截取字符串 ch 的 st~en 这一段子串返回子串的首地址 //注意用完需要根据需要最后free()掉 char* substring(char* ch,int st,int en) { ; c ...
随机推荐
- POJ 2570 Fiber Network
Description Several startup companies have decided to build a better Internet, called the "Fibe ...
- poj 1028 Web Navigation
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31088 Accepted: 13933 ...
- 关于微信小程序的动态跳转
最近在研究微信小程序.在做一个简单的购物小程序时,遇到一个问题:如何通过扫码实现动态的跳转页面功能, 通过研究终于找到了解决方法: 首先当然要实现扫码解析功能js的代码: click: functio ...
- c++ sizeof对象大小整理
1. sizeof 是运算符,而不是函数. 2. 当sizeof 的对象是表达式时,求的大小是表达式返回值的类型大小,但并不计算表达式的值,比如: ; ; cout << sizeof(c ...
- angularjs如何默认选中radio
(1). 使用 ng-checked 即可. <label class="radio-inline"> <input name="display&q ...
- MCU & 51单片机
- 02_ActiveMQ入门
[ActiveMQ 入门HelloWorld例子] [启动ActiveMQ] 1.由于本人PC是64位的,选择在bin目录下的win64/activemq.bat启动. 2.启动成功后,访问http: ...
- 【Linux】应用程序内存段布局
一.各段内存布局 内存布局图 1.BSS段(Block Started by Symbol)未初始化段 2.linux ELF base address is 0x8048000 应用程序虚拟地址起始 ...
- C#多线程和异步(二)——Task和async/await详解(转载)
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...
- Struts1.x 中处理乱码及通过标签显示数据
1.通过filter解决乱码问题 网页的请求到达之前,先要经过filter的处理: 提取数据出现乱码:request.setCharacterEncoding("UTF-8"); ...