当前位置: 首页 > news >正文

PHP实现DFA算法,查找关键词

# 添加关键词 到全局字典dict里面
protected function addWord($strWord)
{$len = mb_strlen($strWord,'UTF-8');$curNode = &$this->dict;for ($index = 0; $index < $len; $index++) {$word = mb_substr($strWord, $index, 1, 'UTF-8');if (!isset($curNode[$word])) {$curNode[$word] = [];}$curNode =& $curNode[$word];}$curNode['end'] = 1;
}
# 根据字典dict搜索关键词public function searchMatchWords($strWords)
{$len = mb_strlen($strWords, 'UTF-8');$result = [];for ($index = 0; $index < $len; $index++) {$wordLength = $this->searchWord($strWords, $index);if ($wordLength > 0) {$words = mb_substr($strWords, $index, $wordLength, 'UTF-8');if (!isset($result[$words])) {$result[$words] = 1;} else {$result[$words] = $result[$words]++;}$index += $wordLength - 1;}}return $result;
}protected function searchWord($strWords, $beginIndex)
{$len = mb_strlen($strWords, 'UTF-8');$curNode = $this->dict;$isEnd = false;$wordLength = 0;for ($index = $beginIndex; $index < $len; $index++) {$word = mb_substr($strWords, $index, 1, 'UTF-8');if (!isset($curNode[$word])) {break;}$wordLength++;$curNode = $curNode[$word];if (isset($curNode['end'])) {$isEnd = true;}}if (!$isEnd) {$wordLength = 0;}return $wordLength;
}

参考文档

DFA算法匹配关键词 - 简书

相关文章:

PHP实现DFA算法,查找关键词

# 添加关键词 到全局字典dict里面 protected function addWord($strWord) {$len mb_strlen($strWord,UTF-8);$curNode &$this->dict;for ($index 0; $index < $len; $index) {$word mb_substr($strWord, $index, 1, UTF-8);if (!isset($curNode[$word])) {$curNo…...

JTS:08 JTS图形相交

这里写目录标题 版本JTS disjoint intersects俩个图形不相交俩个图形 边相交俩个图形 内部相交俩个图形 点相交 版本 org.locationtech.jts:jts-core:1.19.0 链接: github JTS disjoint intersects 不相交的 九交模型FF*FF**** 相交的 九交模型 [T********] [*T*******] [**…...

深挖 ThreadLocal 底层原理?它有什么用?学会之后手撕面试官

目录 1. ThreadLocal 的主要功能&#xff1f; 2. ThreadLocal 代码举例 3. ThreadLocal 源码分析 3.1 ThreadLocal 的 get 方法源码解析 3.2 ThreadLocal 的 set 方法源码解析 3.3 ThreadLocal 的 createMap 方法源码解析 3.4 ThreadLocal 的 set 方法总结 4. 为什么En…...

sort()排序函数(c++)

文章目录 sort()排序函数&#xff08;c&#xff09;一、原理二、使用方法&#xff08;一&#xff09;头文件&#xff08;二&#xff09;使用语法1.方式一&#xff08;默认&#xff09;2.方式二&#xff1a;定义升序或降序3.方式三&#xff1a;自定义 sort()排序函数&#xff08…...

如何评估测试用例的优先级?

评估测试用例的优先级&#xff0c;有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题&#xff0c;助于提高测试质量&#xff0c;提高用户满意度。 如果没有做好测试用例的优先级评估&#xff0c;往往容易造成对系统关键功能和高风险场景测试的忽略&…...

510758-28-8,用于标记蛋白质和酶的配体TBTA

产品简介&#xff1a;Tris(benzyltriazolylmethyl)amine (TBTA)是一种配体&#xff0c;能作为生化工具用于标记蛋白质和酶。 CAS号&#xff1a;510758-28-8 中文名&#xff1a;三[(1-苄基-1H-1,2,3-三唑-4-基)甲基]胺 英文名&#xff1a;TBTA 化学式&#xff1a;C30H30N10…...

Jtti:云服务器ftp不能访问端口如何解决

如果您的云服务器上的FTP服务无法访问端口&#xff0c;可能有多种原因导致这种情况。以下是一些可能的解决方法&#xff1a; 检查FTP服务状态&#xff1a; 首先&#xff0c;请确保您的FTP服务器正在运行。您可以使用以下命令来检查FTP服务器的状态&#xff0c;具体命令可能因FT…...

云服务器租用价格表概览_阿里云腾讯云华为云

云服务器租用价格多少钱一年&#xff1f;阿腾云分享阿里云、腾讯云和华为云的云服务器租用价格表&#xff1a;阿里云2核2G服务器108元一年起、腾讯云2核2G3M带宽轻量服务器95元一年、华为云2核2G3M云耀L实例89元一年起&#xff0c;阿腾云分享更多关于云服务器租用价格明细&…...

E. Iva Pav -前缀和 + 二分 +位运算

题面 分析&#xff1a; 赛时一直纠结于与运算前缀和不可逆&#xff0c;导致没有思路&#xff0c;但是发现行不通并没有及时思考别的解决办法导致一条路走到黑&#xff0c;阻碍了自己的思维&#xff0c;在今年的网络赛赛时也是一样&#xff0c;行不通的时候就没心思去重新想其…...

新手学习:ArcGIS对shp文件裁剪

新手学习&#xff1a;ArcGIS对SHP文件裁剪 新手学习 记录每个步骤&#xff0c;因为有很多控件可能刚开始还不熟悉&#xff0c;根本不知道在哪里&#xff0c;所以写的比较详细。 1.添加要裁剪的shp文件 2.查看shp文件的地理坐标系 双击shp文件&#xff0c;就可以查看shp文件的…...

Java 设计模式——抽象工厂模式

目录 1.概念2.结构3.实现4.优缺点5.使用场景6.模式扩展7.JDK源码解析——Collection.iterator方法 1.概念 &#xff08;1&#xff09;Java 设计模式——工厂方法模式中考虑的是一类产品的生产&#xff0c;如畜牧场只养动物、电视机厂只生产电视机等。这些工厂只生产同种类产品…...

如何使用ChatGPT构建一个Web应用程序?

围绕ChatGPT的最大卖点之一是它可以成为一种有效的编程工具。其想法是这样的&#xff1a;你用自然语言描述需求&#xff0c;该聊天机器人生成满足该需求的代码。但是ChatGPT在这方面到底有多好呢&#xff1f; 还有什么比亲自测试一下更好的方法呢&#xff1f;我们让ChatGPT从头…...

关闭手机广告的步骤

关闭手机广告的步骤 小米 1.设置→小米账号→声明与条款→系统广告→系统工具广告→关闭 2.设置→应用设置→应用管理→右上角三个点→设置→关闭“应用升级提醒”&“资源推荐” 3.桌面左滑打开负一屏→划到底部→设置→服务管理→选择关闭项目 4.桌面→打开任意文件夹…...

【Verilog 教程】6.6Verilog 仿真激励

关键词&#xff1a;testbench&#xff0c;仿真&#xff0c;文件读写 Verilog 代码设计完成后&#xff0c;还需要进行重要的步骤&#xff0c;即逻辑功能仿真。仿真激励文件称之为 testbench&#xff0c;放在各设计模块的顶层&#xff0c;以便对模块进行系统性的例化调用进行仿真…...

Win/Mac版Scitools Understand教育版申请

这里写目录标题 前言教育版申请流程教育账号申请 前言 上篇文章为大家介绍了Scitools Understand软件&#xff0c;通过领取的反馈来看有很多朋友都想用这个软件&#xff0c;但是我的网盘里只存了windows的pojie版&#xff0c;没有mac版的&#xff0c;我没有去网上找相关的资源…...

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 C: 班级活动

[蓝桥杯 2023 国 B] 班级活动 【问题描述】 小明的老师准备组织一次班级活动。班上一共有 n n n 名&#xff08; n n n 为偶数&#xff09;同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 n n …...

YOLOv8改进新颖的Gather-and-Distribute机制,低阶高阶新颖融合,增强了多尺度特征融合能力,实现了延迟和准确性的理想平衡

💡本篇内容:YOLOv8改进新颖的Gather-and-Distribute机制,低阶高阶新颖融合,增强了多尺度特征融合能力,实现了延迟和准确性的理想平衡 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOL…...

面试算法13:二维子矩阵的数字之和

题目 输入一个二维矩阵&#xff0c;如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和&#xff1f;对于同一个二维矩阵&#xff0c;计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如&#xff0c;输入图2.1中的二维矩阵&#xff0c;以及左上角坐标…...

Vue安装插件时候中遇到冲突依赖解决方案

错误如下&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/eslint-plugin-vue npm ERR! dev eslint-pl…...

realloc函数应用IO泄露体验

本题主要介绍realloc函数&#xff0c;平时我们使用realloc最多便是在打malloc_hook–>onegadget的时候&#xff0c;使用realloc_hook调整onegadget的栈帧&#xff0c;从而getshell。 在realloc函数中&#xff0c;也能像malloc一样创建堆&#xff0c;并且比malloc麻烦一些&a…...

实时行情系统设计:从协议选择到高可用架构,再到数据源选型

一、核心问题及解决方案&#xff08;按踩坑频率排序&#xff09; 问题 1&#xff1a;误删他人持有锁——最基础也最易犯的漏洞 成因&#xff1a;释放锁时未做身份校验&#xff0c;直接执行 DEL 命令删除键。典型场景&#xff1a;服务 A 持有锁后&#xff0c;业务逻辑耗时超过锁…...

郭老师-悟性高的人,为何不合群?

悟性高的人&#xff0c;为何不合群&#xff1f; ——他们在独处中&#xff0c;与道同行“你以为他孤独&#xff0c; 其实—— 他正与万物对话。”&#x1f33f; 不合群&#xff0c;不是缺陷&#xff0c; 而是—— 为悟性留出呼吸的空间。&#x1f9d8; 一、独处 ≠ 孤独&#x…...

别死记硬背了!一张图带你理清编译原理‘语法制导翻译’到‘代码优化’的核心链路

编译原理核心链路解析&#xff1a;从语法制导翻译到代码优化的实战指南 编译原理作为计算机科学的重要基石&#xff0c;常常让学习者感到知识点零散、难以形成系统认知。本文将以赋值语句为例&#xff0c;通过清晰的逻辑链路&#xff0c;展示从源代码到优化代码的完整编译过程&…...

门店小程序和收银系统有什么区别?

门店小程序和收银系统有什么区别&#xff1f;在门店数字化过程中&#xff0c;很多企业会同时接触到小程序与收银系统&#xff0c;但两者在功能定位和使用场景上存在明显差异。门店小程序和收银系统的本质区别&#xff0c;在于一个偏向“获客与转化入口”&#xff0c;一个偏向“…...

nlp_structbert_sentence-similarity_chinese-large入门指南:从ModelScope下载到本地Web服务上线

nlp_structbert_sentence-similarity_chinese-large入门指南&#xff1a;从ModelScope下载到本地Web服务上线 你是不是经常需要判断两句话是不是一个意思&#xff1f;比如&#xff0c;检查用户提问是不是同一个问题&#xff0c;或者看看两段文案是不是在说同一件事。以前做这种…...

7个高效步骤:Meshroom开源三维重建工具从入门到精通

7个高效步骤&#xff1a;Meshroom开源三维重建工具从入门到精通 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 技术原理&#xff1a;三维重建的底层逻辑与技术选型 摄影测量技术的数学基础 三维重建技…...

弹幕盒子:5分钟掌握专业弹幕制作,零基础也能轻松上手

弹幕盒子&#xff1a;5分钟掌握专业弹幕制作&#xff0c;零基础也能轻松上手 【免费下载链接】danmubox.github.io 弹幕盒子 项目地址: https://gitcode.com/gh_mirrors/da/danmubox.github.io 你是否曾为视频制作寻找合适的弹幕工具而烦恼&#xff1f;想要给视频添加互…...

多设备协同效率低?用QtScrcpy实现跨平台Android投屏与批量管理

多设备协同效率低&#xff1f;用QtScrcpy实现跨平台Android投屏与批量管理 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/Q…...

我不是在用 AI 助手,我在把自己的能力沉淀成组织资产

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

智能温室监控系统DIY:基于STM32和DS18B20的多节点温度网络搭建指南

智能温室监控系统DIY&#xff1a;基于STM32和DS18B20的多节点温度网络搭建指南 现代农业正经历着从传统耕作向精准化管理的转型&#xff0c;而温度作为影响作物生长的核心参数之一&#xff0c;其监测精度和实时性直接关系到农作物的产量与品质。本文将深入探讨如何利用STM32微控…...