我这段时间因为字符串太差而被关了起来了(昨晚打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字符串匹配相关推荐

  1. KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配

    提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...

  2. 落谷 P3375 【模板】KMP字符串匹配

    题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. 输入格式: 第一行为一个字符串,即为s1 ...

  3. Oulipo-欧力波(KMP字符串匹配问题)

    Oulipo-欧力波 HDU - 1686 The French author Georges Perec (1936–1982) once wrote a book, La disparition, ...

  4. Simpsons’ Hidden Talents辛普森一家的隐藏天赋(next数组和kmp字符串匹配)

    辛普森一家的隐藏天赋 HDU - 2594 目录 辛普森一家的隐藏天赋 HDU - 2594 题意描述:当给定字符串s1和s2时,找到s1中最长的前缀,即s2的后缀.如果有,输出相同的字符串即字符串长 ...

  5. KMP算法详解P3375 【模板】KMP字符串匹配题解

    KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...

  6. 【模板】KMP字符串匹配

    题目描述 给出两个字符串 s_1s1​ 和 s_2s2​,若 s_1s1​ 的区间 [l, r][l,r] 子串与 s_2s2​ 完全相同,则称 s_2s2​ 在 s_1s1​ 中出现了,其出现位置为 ...

  7. 数据结构 kmp字符串匹配_用动画解释 KMP 算法

    大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...

  8. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  9. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

最新文章

  1. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)...
  2. linux+网卡驱动社区,Linux下如何确定网卡所使用的驱动程序
  3. CDH6.3.2默认管理端口是7180,HDFS相关端口
  4. Linux 学习_ssh(secure shell)
  5. [蓝桥杯2015决赛]穿越雷区-bfs
  6. Android SlidingMenu 仿网易新闻客户端布局
  7. BZOJ1876 SDOI2009 SuperGCD 其他
  8. python课堂点名_Python制作课堂点名器,原来还能这么玩!
  9. Linux下MySQL数据库的备份与还原
  10. 20190929每日一句
  11. 代码审查的必要性和最佳实践
  12. mysql 时间加五分钟_mysql当前时间增加5分钟的实现方法
  13. GPU编程与CG语言之阳春白雪下里巴人.pdf 分享
  14. 使用fsck修复损坏磁盘
  15. 西门子PLC中DB与DI有什么区别
  16. 川土微 数字隔离器 CA-IS3722HS可替代ADUM1201ARZ
  17. oracle升级版本矩阵图
  18. 阅文java服务端开发_阅文笔试复盘
  19. Kotlin contract 用法及原理
  20. 多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中(CSDN创始人、总裁、副总裁联合推荐)

热门文章

  1. 卫星轨道的估计问题(Matlab)(三):标准重采样粒子滤波(SIR)对新问题的尝试
  2. Python容器专题 - deque(队列)--双向队列对象
  3. Java回调网址_极光短信- 回调接口 - 极光文档
  4. HTML语言中 blur()方法,jQuery的blur()方法怎么用?
  5. java的main是主线程吗_main函数是主线程吗
  6. 一句Python,一句R︱数据的合并、分组、排序、翻转、集合
  7. Cognos8.3 + oracle9i数据集市 建cube性能调整
  8. Cognos8.3解决方案
  9. $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI']三者的区别
  10. Android 关于java.util.NoSuchElementException错误