关于kmp算法
2024-08-29 23:24:58
字符串匹配算法简称kmp
日常安利大佬博客(真的是一篇很好的文章)
觉得百度百科讲的也挺好
就是给出两个字符串a, b
求b在a中的所有位置
next数组:代表当前字符之前的字符串中,有多大长度的相同前缀后缀(都指自己本身)
对于求next数组我们考虑b字符串自己匹配自己
lb = strlen (b + );
for (int i = ; i <= lb; i++) {
while(j && b[j + ] != b[i]) j = next[j];
if(b[j + ] == b[i]) j++;
next[i] = j;
}
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int next[];
int la, lb, j;
char a[], b[];
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 = 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) {
printf ("%d\n", i - lb + );
j = next[j];
}
}
for (int i = ; i <= lb; i++)
printf ("%d ", next[i]);
return ;
}
最新文章
- Dev GridControl数据导出格式问题
- 免费国内外";代码托管服务器";收集
- 【wikioi】1229 数字游戏(dfs+水题)
- 图解 交集(join)和 合并(union)
- DAG模型
- supplicant
- SQL-AdventureWorks样例数据库
- Jersey Rest服务类型
- 关于fft的一点总结
- hdu 3518 Boring counting 后缀数组LCP
- 【Java】ArrayList和LinkedList的区别
- python高级编程之元类(第3部分结束)
- LFS,编译自己的Linux系统 - 完成准备工作
- shell脚本中常见的一些特殊符号和作用详解
- Extjs中GridPanel的各个属性与方法
- base64_encode与base64_decode
- Android--MediaPlayer高级
- Vue面试中经常会被问到的面试题
- Spring-boot之 rabbitmq
- jmeter使用正则表达式匹配多个中的响应结果