【字符串】跳来跳去的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 ...
随机推荐
- 016-hibernateutils模板
package ${enclosing_package}; import org.hibernate.HibernateException; import org.hibernate.Session; ...
- TOJ 3176 Challenge from XOR
Description Mr. AngelClover just learnt XOR on his Computer Class. XOR is a bit arithmetic operator ...
- unity项目架构
Unity 游戏框架搭建 (一) 概述Unity 游戏框架搭建 (二) 单例的模板Unity 游戏框架搭建 (三) MonoBehaviour单例的模板Unity 游戏框架搭建 (四) 简易有限状态机 ...
- 从Zero到Hero,一文掌握Python关键代码
# 01基础篇 # 变量 #int one=1 some_number=100 print("one=",one) #print type1 print("some_nu ...
- WCF入门教程通信(二)
一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...
- Javascript模块化编程详解
在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代 ...
- java使用poi.3.10读取excel 2003 (xls格式)
最近在做一个Excel导入数据库的案例,整理文档出来供大家参考. 1.下载 最新的 poi http://poi.apache.org/download.html 2.解压 把相关jar包引进项 ...
- ATL模板库中的OLEDB与ADO
上次将OLEDB的所有内容基本上都说完了,从之前的示例上来看OLEDB中有许多变量的定义,什么结果集对象.session对象.命令对象,还有各种缓冲等等,总体上来说直接使用OLEDB写程序很麻烦,用很 ...
- mysql二:库操作
一.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等 performance_schema: My ...
- jq实现发送验证码倒计时60s
setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. setTimeout() :在指定的毫 ...