字符串匹配算法简称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 ;
}

最新文章

  1. Dev GridControl数据导出格式问题
  2. 免费国内外&quot;代码托管服务器&quot;收集
  3. 【wikioi】1229 数字游戏(dfs+水题)
  4. 图解 交集(join)和 合并(union)
  5. DAG模型
  6. supplicant
  7. SQL-AdventureWorks样例数据库
  8. Jersey Rest服务类型
  9. 关于fft的一点总结
  10. hdu 3518 Boring counting 后缀数组LCP
  11. 【Java】ArrayList和LinkedList的区别
  12. python高级编程之元类(第3部分结束)
  13. LFS,编译自己的Linux系统 - 完成准备工作
  14. shell脚本中常见的一些特殊符号和作用详解
  15. Extjs中GridPanel的各个属性与方法
  16. base64_encode与base64_decode
  17. Android--MediaPlayer高级
  18. Vue面试中经常会被问到的面试题
  19. Spring-boot之 rabbitmq
  20. jmeter使用正则表达式匹配多个中的响应结果

热门文章

  1. syntax error near unexpected token 脚本报错误解决
  2. (原创)使用C#开发PLC上位机监控系统客户端应用程序
  3. Java自学-数字与字符串 格式化输出
  4. dubbo循序渐进 - nacos安装
  5. DOM创建节点
  6. 安装vivado 2016.1时出错
  7. js查询手机号码格式是否正确
  8. 生意bisynes单词bisynes商业
  9. android ListView中含有按钮事件实时更新ListView数据案例
  10. Cheat Engine 基本用法