P5410 【模板】扩展 KMP
2024-08-29 07:59:54
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+;
int q, nxt[maxn], extend[maxn];
string a, b;
void getnxt() {
nxt[] = b.size();
int now = ;
while (b[now]==b[+now] && now+<b.size()) now++;
nxt[] = now;
int p = ;
for (int i = ; i < b.size(); i++) {
if (i+nxt[i-p] < nxt[p]+p) nxt[i] = nxt[i-p];
else {
int now = nxt[p]+p-i;
now = max(now,);
while (b[now]==b[i+now] && i+now<b.size()) now++;
nxt[i] = now;
p = i;
}
}
}
void exkmp() {
getnxt();
int now = ;
while (a[now]==b[now] && now < min(a.size(),b.size())) now++;
extend[] = now;
int p = ;
for (int i = ; i < a.size(); i++) {
if (i+nxt[i-p] < extend[p]+p) extend[i] = nxt[i-p];
else {
int now = extend[p]+p-i;
now = max(now,);
while (b[now]==a[i+now] && now<b.size() && now+i<a.size()) now++;
extend[i] = now;
p = i;
}
}
} int main() {
cin >> a >> b;
exkmp();
int len = b.size();
printf("%d",nxt[]);
for (int i = ; i < len; i++) printf(" %d",nxt[i]);
printf("\n"); len = a.size();
printf("%d",extend[]);
for (int i = ; i < len; i++) printf(" %d",extend[i]);
printf("\n");
return ;
}
最新文章
- Qt工程打包发布
- [PHP]使用PHPMailer发送带附件并支持HTML内容的邮件
- MFC ADO连接Oracle12c数据库 服务端配置
- 网站开发常用jQuery插件总结(13)定位插件scrollto
- Html代码Font-Size中px与pt的区别
- 基础知识 mfc
- HTML 转文本及HTML内容提取(C#)
- linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)
- PHPMailer实现PHP邮件发送
- Django配置session
- JavaScript基础知识(if、if else、else if、while、switch...case语句)
- [LeetCode] Implement Magic Dictionary 实现神奇字典
- consul分布式集群搭建
- Java 读取配置文件数据
- 微信小程序---分包加载(subpackages)及报错
- crontab 详解
- iOS 加密的3种方法
- String和StringBuffer和StringBuilder
- Linux alias命令详解
- Android -- 点击双下返回退出程序