news 2026/7/19 15:05:32

字符串模式匹配算法(数据结构)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
字符串模式匹配算法(数据结构)
  • 主串:被搜索的字符串
  • 模式串:搜索目标的字符串
  • 字符串的模式匹配:在主串中找到与模式串相同的子串

朴素模式匹配算法

  • 将主串中长度与模式串相同的子串与模式串一一对比
  • 在长度为n的主串中,长度为m的子串有n-m+1

#index基本操作中的方法

intIndex(SString S,SString T){inti=1,n=strLength(S),m=StrLength(T);SString sub;while(i<=n-m+1){SubString(sub,S,i,m);if(StrCompare(sub,T)!=0)++i;elsereturni;//返回匹配成功子串的起始位置}return0;}

#双指针算法实现

intIndex(SString S,SSttring T){inti=1,j=1;while(i<=S.length&&j<=T.length){if(S.ch[i]==T.ch[j]){i++;j++;//相同,继续比较后续字符}else{i=i-j+2;//主串指针初始+1j=1;//模式串指针归位}}if(j>T.length)returni-T.length;elsereturn0;}
  • 最坏的情况,每个子串都要对比m个字符,共n-m+1个子串,复杂度 = O ((n−m+1) m) = O(nm)

KMP算法

intIndex_KMP(SString S,SString T,intnext[]){inti=1,j=1;while(i<=S.length&&j<=T.length){if(j==0||S.ch[i]==T.ch[j]){++i;++j;//继续比较后继字符}else{j=next[j];if(j==0){i++;j++;}}//模式串向右移动}if(j>T.length)returni-T.length;//匹配成功,返回主串起始下标elsereturn0;}
  • 最坏时间复杂度:O(m+n)

#求next数组

  • next[1]无脑写0
  • next[2]无脑写1
  • 在不匹配的位置前边,划一根美丽的分界线。模式串一步一步往后退,直到分界线之前“能对上”,或模式串完全跨过分界线为止。此时 j 指向哪儿,next数组值就是多少

#求nextval数组

nextval[1]=0;for(intj=2;j<=T.length;j++){if(T.ch[next[j]]==T.ch[j])nextval[j]=nextval[next[j]];elsenextval[j]=next[j];}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 15:04:21

独角数卡:5分钟快速部署数字商品自动化销售系统的终极指南

独角数卡&#xff1a;5分钟快速部署数字商品自动化销售系统的终极指南 【免费下载链接】dujiaoka &#x1f984;独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速&#xff01;&#x1f680;&#x1f680;&#x1f389;&#x1f389; 项目地址: https://…

作者头像 李华
网站建设 2026/7/19 15:03:25

从零开始学前端 | 第十二章:变量、数据类型与运算

本章定位 上一章我们已经正式进入 JavaScript 学习阶段&#xff0c;解决了一个非常关键的基础问题&#xff1a; JavaScript 是什么。JavaScript 在前端里负责什么。JavaScript 可以在哪里运行。JavaScript 怎么进入网页。控制台和报错应该怎么看。 也就是说&#xff0c;你现在已…

作者头像 李华
网站建设 2026/7/19 15:02:49

一站式大模型云服务平台 SiliconFlow 深度体验与 Python 接入指南

一、硅基流动官网介绍 硅基流动其核心产品SiliconCloud是一站式大模型云服务平台&#xff0c;已集成超过150款主流开源模型&#xff0c;覆盖文本生成、图像生成、视频分析、音频处理等全模态场景。 核心优势&#xff1a; &#xff08;1&#xff09;极速推理引擎&#xff1a;…

作者头像 李华
网站建设 2026/7/19 15:02:41

相同网段终端跨OLT+ONU后二层不通

一 故障背景1.查看故障现象&#xff0c;设备相同网段无法互访&#xff0c;设备查看arp无法获取。2.通过核心olt设备访问两台设备均可以访问&#xff0c;并且在核心可以查看到设备arp地址。3.核心olt设备配置查看未开启二层隔离功能&#xff0c;排除该配置影响。4.两台设备地址掩…

作者头像 李华