洛谷 P3375 【模板】KMP字符串匹配
我这段时间因为字符串太差而被关了起来了(昨晚打cf不会处理字符串现场找大佬模板瞎搞,差点就凉了),所以决定好好补一下字符串的知识QAQ,暂时先学习kmp算法吧~
题目链接:https://www.luogu.org/problemnew/show/P3375
题目:
思路:本题是kmp模板题,不会kmp的看官可以看本题在洛谷的题解,题解区有大量的讲解,我顺便在这里推荐一篇大佬的文章,帮助大家理解kmp算法,http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html。
代码实现如下:
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <stack> 5 #include <cmath> 6 #include <bitset> 7 #include <cstdio> 8 #include <string> 9 #include <vector> 10 #include <cstdlib> 11 #include <cstring> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 typedef long long ll; 17 typedef pair<ll, ll> pll; 18 typedef pair<ll, int> pli; 19 typedef pair<int, ll> pil;; 20 typedef pair<int, int> pii; 21 typedef unsigned long long ull; 22 23 #define lson i<<1 24 #define rson i<<1|1 25 #define bug printf("*********\n"); 26 #define FIN freopen("D://code//in.txt", "r", stdin); 27 #define debug(x) cout<<"["<<x<<"]" <<endl; 28 #define IO ios::sync_with_stdio(false),cin.tie(0); 29 30 const double eps = 1e-8; 31 const int mod = 10007; 32 const int maxn = 1e6 + 7; 33 const double pi = acos(-1); 34 const int inf = 0x3f3f3f3f; 35 const ll INF = 0x3f3f3f3f3f3f3f; 36 37 int lens1, lens2; 38 string s1, s2; 39 int nex[maxn]; 40 41 void get_next() { 42 nex[0] = -1; 43 for(int i = 0, k = -1; i < lens2; ) { 44 if(k == -1 || s2[i] == s2[k]) { 45 ++k;++i; 46 nex[i] = k; 47 } else k = nex[k]; 48 } 49 } 50 51 void kmp() { 52 get_next(); 53 int i = 0, j = 0; 54 while(i < lens1 && j < lens2) { 55 if(j == -1 || s1[i] == s2[j]) { 56 i++,j++; 57 if(j == lens2) { 58 printf("%d\n", i - j + 1); 59 j = nex[j]; 60 } 61 } else j = nex[j]; 62 } 63 } 64 65 int main() { 66 //FIN; 67 cin >>s1 >>s2; 68 lens1 = s1.size(), lens2 = s2.size(); 69 kmp(); 70 for(int i = 1; i <= lens2; i++) { 71 printf("%d%c", nex[i], i == lens2 ? '\n' : ' '); 72 } 73 return 0; 74 }
转载于:https://www.cnblogs.com/Dillonh/p/9419912.html
洛谷 P3375 【模板】KMP字符串匹配相关推荐
- KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配
提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...
- 落谷 P3375 【模板】KMP字符串匹配
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. 输入格式: 第一行为一个字符串,即为s1 ...
- Oulipo-欧力波(KMP字符串匹配问题)
Oulipo-欧力波 HDU - 1686 The French author Georges Perec (1936–1982) once wrote a book, La disparition, ...
- Simpsons’ Hidden Talents辛普森一家的隐藏天赋(next数组和kmp字符串匹配)
辛普森一家的隐藏天赋 HDU - 2594 目录 辛普森一家的隐藏天赋 HDU - 2594 题意描述:当给定字符串s1和s2时,找到s1中最长的前缀,即s2的后缀.如果有,输出相同的字符串即字符串长 ...
- KMP算法详解P3375 【模板】KMP字符串匹配题解
KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...
- 【模板】KMP字符串匹配
题目描述 给出两个字符串 s_1s1 和 s_2s2,若 s_1s1 的区间 [l, r][l,r] 子串与 s_2s2 完全相同,则称 s_2s2 在 s_1s1 中出现了,其出现位置为 ...
- 数据结构 kmp字符串匹配_用动画解释 KMP 算法
大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
最新文章
- 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)...
- linux+网卡驱动社区,Linux下如何确定网卡所使用的驱动程序
- CDH6.3.2默认管理端口是7180,HDFS相关端口
- Linux 学习_ssh(secure shell)
- [蓝桥杯2015决赛]穿越雷区-bfs
- Android SlidingMenu 仿网易新闻客户端布局
- BZOJ1876 SDOI2009 SuperGCD 其他
- python课堂点名_Python制作课堂点名器,原来还能这么玩!
- Linux下MySQL数据库的备份与还原
- 20190929每日一句
- 代码审查的必要性和最佳实践
- mysql 时间加五分钟_mysql当前时间增加5分钟的实现方法
- GPU编程与CG语言之阳春白雪下里巴人.pdf 分享
- 使用fsck修复损坏磁盘
- 西门子PLC中DB与DI有什么区别
- 川土微 数字隔离器 CA-IS3722HS可替代ADUM1201ARZ
- oracle升级版本矩阵图
- 阅文java服务端开发_阅文笔试复盘
- Kotlin contract 用法及原理
- 多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中(CSDN创始人、总裁、副总裁联合推荐)
热门文章
- 卫星轨道的估计问题(Matlab)(三):标准重采样粒子滤波(SIR)对新问题的尝试
- Python容器专题 - deque(队列)--双向队列对象
- Java回调网址_极光短信- 回调接口 - 极光文档
- HTML语言中 blur()方法,jQuery的blur()方法怎么用?
- java的main是主线程吗_main函数是主线程吗
- 一句Python,一句R︱数据的合并、分组、排序、翻转、集合
- Cognos8.3 + oracle9i数据集市 建cube性能调整
- Cognos8.3解决方案
- $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI']三者的区别
- Android 关于java.util.NoSuchElementException错误