4.3.1 求子串位置的定位函数Index(S,T,pos)

子串的定位操作通常称做串的模式匹配(其中T称为模式串),采用定长顺序存储结构,可以写出不依赖于其他串操作的匹配算法。

算法4.5:

下面是书中的伪代码:

int Index(SString S, SString T, int pos)
{ // 返回子串T在主串S中第pos个字符之后的位置。// 若不存在,则函数值为0。// 其中,T非空,1≤pos≤StrLength(S)。int i = pos;int j = 1;while (i <= S[0] && j <= T[0]) {if (S[i] == T[j]) // 继续比较后继字符{  ++i;++j;}else // 指针后退重新开始匹配 {i = i - j + 2;j = 1;}}if (j > T[0]) return i - T[0];else return 0;
} // Index

下面分析下:

这里先说明下,这个S[0],T[0]这个地方存储了整个串的大小。

这个代码的巧妙之处在于i=i-j+2和j=1这个地方,这个i=j-j+2,可以让i进行后移,也就是S后移,这里j=1,的意思如下:举个例子,当T中是ABC,而S是ABABABC,pos为1,那么j=1的作用就是清理,什么叫清理,意思就是当发现S中只有前两个字母相似,而没有第三个,这时重新计数。当然i也要进行回溯。

下面这张图,提现了这个过程(T='abcac'和主串S,pos=1)

这节就到这,下一节讲解数据结构里面的第一个难点:

KMP算法!

4.3串的模式匹配算法(BF算法)相关推荐

  1. 串的模式匹配算法1-BF算法

    目录 1.BF算法 1.1匹配过程: 1.2直接使用string方法编写BF算法: 1.3编写SString来编写BF算法 子串的定位运算通常称为串的模式匹配或是串匹配.著名的算法有BF算法和KMP算 ...

  2. 【考研】串的模式匹配算法——KMP算法(含真题)

    前言 本文内容源于对<数据结构(C语言版)>(第2版).王道讲解学习所得心得.笔记整理和总结,以便复习. 可搭配以下链接一起学习: [考研]<数据结构>知识点总结.pdf_考研 ...

  3. 串的模式匹配(BF算法)

    [问题描述] 串的模式匹配算法BF的实现与应用. [输入形式] 第一行输入主串s: 第二行输入模式串t: 输入串中均不包含空格字符. [输出形式] 模式串在主串s中的出现的每一个位置序号.若一次都未匹 ...

  4. [数据结构]模式匹配算法--KMP算法详解

    目录 一. 模式匹配 二. 模式匹配算法 1. 朴素模式匹配算法 2. KMP算法 1). KMP算法的优势 2). KMP算法的原理 3). next数组的构造 4). 利用next数组匹配的过程 ...

  5. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  6. 第四章:2.串 -- 串的模式匹配算法(KMP)

    前言: 目录: 1.串类型的定义 2.串的表示和实现 3.串的模式匹配算法 4.串操作应用举例 正文: 串的模式匹配即,在给定主串S 中,搜索子串T 的位置,如果存在T 则返回其所在位置,否则返回 0 ...

  7. 数据结构笔记(十四)-- 串的模式匹配算法

    串的模式匹配算法 一.普通模式匹配算法 1.算法解析 普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果. 例如,使用普通模式匹配算法判断串 T( ...

  8. 数据结构(C语言版)严蔚敏(字符串的模式匹配算法--KMP算法)

    数据结构(C语言版)严蔚敏(字符串的模式匹配算法–KMP算法) 1.暴力匹配算法 // 暴力匹配算法 int Index2(SString S,SString T) {// S是主串,T是子串int ...

  9. 数据结构:KMP算法 串的模式匹配算法(全网最详细)

    目录 KMP模式匹配算法 简述 KMP模式匹配算法原理 如果人眼来优化的话,怎样处理         接下来我们自己来发现j的移动规律: 这一段公式证明了我们为什么可以直接将j移动到k而无须再比较前面 ...

最新文章

  1. 数据蒋堂 | 迭代聚合语法
  2. js获取已知scripts中是否存在某变量_JS全局变量是如何工作的?
  3. php 编译 线程安全,PHP7(zts 线程安全版)编译安装(支持多线程pthreads)
  4. Vue页面骨架屏(一)
  5. 服务:OracleDBConsoleorcl [Agent process exited abnormally during initialization]
  6. mysql报1665_mysql错误处理之ERROR 1665 (HY000)_MySQL
  7. dicom worklist、pacs环境搭建
  8. 经典 SQL 数据库笔试题及答案整理
  9. Makefile教程一
  10. flink的jar包和服务器的包冲突解决方案
  11. 小程序商品数据对象累加加入购物车缓存导致的数组嵌套在上一层数组中的问题
  12. uc7.5java下载,uc浏览器7.5版手机下载-uc浏览器7.5官方版v7.5 安卓版 - 极光下载站...
  13. c语言之学生考勤打卡系统
  14. 净空法师法语:你想真正消业障,要用真心待人接物!南无阿弥陀佛!
  15. 大规模MIMO天线应用中的优势与挑战
  16. IGES文件解析1——几何图元(更新中...)
  17. fastadmin 简单的根据单选按钮显示对应的文本框
  18. 大学计算机基础完整性约束,大一大学计算机基础题库含12份
  19. Matlab------------寻找峰值函数
  20. 区块链攻击方式总结二

热门文章

  1. [转贴]非技术:在广州天河北被抢全记录(入面D广州话真系厉害,不懂粤语者别看,会吐血)...
  2. 程序员都长得丑?颜值底线是程序员?
  3. 基于Hadoop架构下的FineBI大数据引擎技术原理
  4. 码农回忆刚毕业工作的那年
  5. 企业即时通讯软件2013 即时通讯大手笔
  6. 安静的飞鸽传书2011绿色版地方
  7. 飞鸽传书:不知不觉,时间又没了!
  8. “QQ尾巴病毒”核心技术的实现
  9. 页面仔 很丢人么?前端越来越不好干了
  10. 还在担心没有服务器做不了数据分析?这个免费资源看一下!