本文主要包括三部分内容

  1. 字典树
  2. 建立ac自动机
  3. ac自动机匹配规则

字典树

字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。 典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计

字典树长成这样的:

图片来自网络

这个字典树的模式串是ABC, BCD, BD, C

ac自动机

ac自动机就是在字典树的基础上增加每个节点的fail节点。

ac自动机建立规则:

  1. 第一层节点(根节点的子节点)的fail节点是根节点
  2. 其他节点的的fail节点, 如果它的父节点的fail节点的存在跟它的值一样的子节点, 那么fail节点就指向这个, 否则指向根节点

匹配规则:

首先把根节点设置为匹配节点, 判断匹配的文本值是否存在于匹配节点的子节点的值

如果存在, 继续往下走, 匹配到的节点变为匹配节点, 匹配的文本的下标也往下走

如果不存在, 分两种情况,

匹配节点是根节点, 匹配文本下标往后走

否则把当前匹配节点的fail指针变为匹配节点, 匹配文本下标不动

下面直接上代码

http://github.com/jackwangfeng/acMachine

go regexp匹配字符串_多模式字符串匹配算法ac自动机(用go语言实现)相关推荐

  1. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  2. python字符串后面添加字符串_什么是字符串?怎样在Python中添加字符串?

    字符串是一种表示文本的数据类型,字符串中的字符可以是ASCII字符.各种符号以及各种Unicode字符.Python中的字符串有如下三种表现方式. 第1种方式:使用单引号包含字符.示例代码如下: 'a ...

  3. 减去字符串_从文本字符串中提取指定值的6个超级技巧解读

    在实际的工作中,从指定的字符串中提取指定文本也是常用的技巧之一,除了手动操作之外,下文的8种应用技巧也是必须要掌握的. 一.Left函数法.功能:从指定文本字符串的第一个字符开始,提取指定长度的字符串 ...

  4. 【AC自动机】【字符串】【字典树】AC自动机 学习笔记

    blog:www.wjyyy.top     AC自动机是一种毒瘤的方便的多模式串匹配算法.基于字典树,用到了类似KMP的思维.     AC自动机与KMP不同的是,AC自动机可以同时匹配多个模式串, ...

  5. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  6. 字符串切片反转字符串_如何反转字符串

    字符串切片反转字符串 Can you write a function that reverses an inputted string without using the built-in Arra ...

  7. oracle按特定字符截取字符串_妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”...

    目的 shell脚本中各种条件的判断,都需要对判定条件精准把控,而字符串在脚本中用的是最多的,怎样准确的获取你想要的字符串至关重要.本文详细介绍了shell脚本中妙用字符串的替换和截取,让你精准获得你 ...

  8. 截取字符串_妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”...

    目的 shell脚本中各种条件的判断,都需要对判定条件精准把控,而字符串在脚本中用的是最多的,怎样准确的获取你想要的字符串至关重要.本文详细介绍了shell脚本中妙用字符串的替换和截取,让你精准获得你 ...

  9. python希腊字母字符串_#10 Python字符串

    前言 通过上一节可知,Python6个序列的内置类型中,最常见的是列表和元组,但在Python中,最常用的数据类型却不是列表和元组,而是字符串.要想深入了解字符串,必须先掌握字符编码问题.因此本篇博文 ...

最新文章

  1. Nature:拟南芥微生物组功能研究0概述
  2. 2天训练出15亿参数大模型,国产开源项目力克英伟达Megatron-LM,来自LAMB作者团队...
  3. 怎么理解linux的平均负载及平均负载高后的排查工具
  4. WEB前端必须掌握的一些算法题
  5. C++:14---虚继承,虚函数,多态
  6. 操作系统-进程同步与互斥易混点
  7. 机器学习--逻辑斯谛回归(Logistic Regression)
  8. oopc——7.面向接口编程
  9. 静态库的冲突 duplicate symbol
  10. Web Hacking 101 中文版 十五、代码执行
  11. ecology9 系统文件常用说明
  12. QueryRunner类常用的方法
  13. delphi 去掉字符串中所有的标点符号_[话俾你知]Python使用正则处理字符串技巧(分割、替换)...
  14. Thor 1.5.3中文版 (使用自定义按键启动软件)
  15. ssh 远程连接详解--(linux运维09)
  16. 多任务学习 Multi-task learning
  17. 【EtherCAT分析】三、EtherCAT从站设备描述文件设计
  18. 本门藏经阁 - AndroidX
  19. 使用Node.js手撸一个建静态Web服务器,内部CV指南
  20. 安卓中发短信的几种方式总结和实现

热门文章

  1. [插头DP自我总结]
  2. shell脚本常见错误
  3. asp.net 在webconfig里自定义错误页
  4. 【Centos配置2】远程管理必备工具配置:ssh/vnc/webadmin
  5. php 最长公共子串,PHP实现求解最长公共子串思路方法
  6. python邮件发送_Python实现邮件发送
  7. python如何执行代码漏洞_任意代码执行漏洞
  8. 高清动漫壁纸,满足动漫视觉控的你
  9. UI设计干货素材|轻松搞定页面分页符(指示器)的设计
  10. 【网页素材】数据图表界面设计UI设计PSD模板