P5410 【模板】扩展 KMP
时间:2019-10-20
本文章向大家介绍P5410 【模板】扩展 KMP,主要包括P5410 【模板】扩展 KMP使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn = 1e6+5; 4 int q, nxt[maxn], extend[maxn]; 5 string a, b; 6 void getnxt() { 7 nxt[0] = b.size(); 8 int now = 0; 9 while (b[now]==b[1+now] && now+1<b.size()) now++; 10 nxt[1] = now; 11 int p = 1; 12 for (int i = 2; i < b.size(); i++) { 13 if (i+nxt[i-p] < nxt[p]+p) nxt[i] = nxt[i-p]; 14 else { 15 int now = nxt[p]+p-i; 16 now = max(now,0); 17 while (b[now]==b[i+now] && i+now<b.size()) now++; 18 nxt[i] = now; 19 p = i; 20 } 21 } 22 } 23 void exkmp() { 24 getnxt(); 25 int now = 0; 26 while (a[now]==b[now] && now < min(a.size(),b.size())) now++; 27 extend[0] = now; 28 int p = 0; 29 for (int i = 1; i < a.size(); i++) { 30 if (i+nxt[i-p] < extend[p]+p) extend[i] = nxt[i-p]; 31 else { 32 int now = extend[p]+p-i; 33 now = max(now,0); 34 while (b[now]==a[i+now] && now<b.size() && now+i<a.size()) now++; 35 extend[i] = now; 36 p = i; 37 } 38 } 39 } 40 41 int main() { 42 cin >> a >> b; 43 exkmp(); 44 int len = b.size(); 45 printf("%d",nxt[0]); 46 for (int i = 1; i < len; i++) printf(" %d",nxt[i]); 47 printf("\n"); 48 49 len = a.size(); 50 printf("%d",extend[0]); 51 for (int i = 1; i < len; i++) printf(" %d",extend[i]); 52 printf("\n"); 53 return 0; 54 }
原文地址:https://www.cnblogs.com/wstong/p/11707812.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode | 141.环形链表
- LeetCode | 20.有效的括号
- springboot开发之实现登录功能
- springboot开发之国际化(中英文切换)
- LeetCode | 225.用队列实现栈
- springboot开发之显示员工信息
- LeetCode | 232.用栈实现队列
- springboot开发之thymeleaf页面公共元素的抽取
- Redis | Redis 通用命令
- python爬虫--自动下载cosplay小姐姐图片(xpath使用自定义创建文件路径)
- springboot开发之修改员工
- LeetCode | 703.数据流中的第K大元素
- springboot开发之配置自定义的错误界面和错误信息
- springboot开发之删除员工
- LeetCode | 1.两数之和