【字符串】跳来跳去的KMP匹配
2024-09-02 03:58:36
原理:
不给予证明啦(懒得一批
但是代码中有给还算详细的注释
参考: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打前面的两题
晚上又花了一点时间理解
打完了这个板子
最新文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
- No module named &#39;urllib2&#39;
- Java基础之类的初始化顺序
- (3)JSTL的fn方法库
- 你了解javascript中的function吗?(1)
- druid连接池配置
- 报错:java.lang.IllegalStateException: Cannot call sendError() after the response has been committed(待解答)
- vimium
- Poj 3239 Solution to the n Queens Puzzle
- python 模拟ajax查询社工库...
- (十二)学习CSS之box-sizing 属性
- Android_Intent意图详解
- USB接口的SmartCard Class协议标准:ICCD and CCID
- IOS多线程加锁
- poj-2337(欧拉回路输出)
- Pandas学习1 --- 数据载入
- Quick-Cocos2d-x 新建项目
- 2.HBase In Action 第一章-HBase简介(1.1数据管理系统:快速学习)
- Reflector_8.3.0.93_安装文件及破解工具
- LeakCanary,30分钟从入门到精通