朴素模式匹配算法(C语言)
一、什么是字符串的模式匹配?
- 字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。
- 注意:
①、子串——主串的一部分,一定存在。
②、模式串——不一定能在主串中找到
二、朴素模式匹配算法
- 主串长度为n,模式串长度为m。
- 朴素模式匹配算法:将主串中所有长度为m的子串依次与模式串匹配对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。
- 最多对比n-m+1个子串
(一)通过数组下标实现朴素模式匹配算法
- 若当前⼦串匹配失败,则主串指针 i 指向下⼀个⼦串的第⼀个位置,模式串指针 j 回到模式串的第⼀个位置
- 若
j > T.length
,则当前⼦串匹配成功,返回当前⼦串第⼀个字符的位置 ——i - T.length
int Index(SString S, SString T){int i=1,j=1;while(i <= S.length && j<=T.length){if(S.ch[i]==T.ch[j]){++i;++j; //继续比较后继字符}else{i=i-j+2;j=1; //指针后退重新开始匹配}}if(j > T.length)return i-T.length;elsereturn 0;
}
(二)时间复杂度
- 设主串⻓度为 n,模式串⻓度为 m,则
①、最坏时间复杂度 = O(nm)
②、最好时间复杂度 = O(n)
1. 最坏时间复杂度O(nm)
- 最坏的情况,每个⼦串都要对⽐ m 个字符,共 n-m+1 个⼦串,复杂度 = O((n-m+1)m) = O(nm)
- 注:很多时候,n >> m
2. 最好时间复杂度O(n)
- 最好的情况,每个⼦串的第⼀个字符就匹配失败,共 n-m+1 个⼦串,复杂度 = O(n-m+1) = O(n)
- 注:很多时候,n >> m
朴素模式匹配算法(C语言)相关推荐
- 字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)
字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置 字符串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 朴素 ...
- 图解字符串的朴素模式匹配算法
复习串的朴素模式匹配算法 模式匹配 : 子串定位运算,在主串中找出子串出现的位置. 在串匹配中,将主串 S 称为目标(串),子串 T 称为模式(串).如果在主串 S 中能够找到子串 T, 则称匹配成功 ...
- 4.2.1朴素模式匹配算法
什么是字符串的模式匹配: 从这段字符串里面搜索内容,被搜索的字符串我们称之为主串. 也可能匹配不到 主串长度为n,模式串长度为m. 朴素模式匹配算法:将主串中所有长度为m的字串依次与模式串对比,直到找 ...
- 4. 串的【朴素模式匹配算法】、【KPM算法:求next数组、nextval数组】
串的模式匹配:在主串中,找到与模式串相同的子串,并返回其所在位置. 其实就是给出一个串abc,找到abc在主串的位置[abc都要匹配] 模式串:给出一个串abc 子串:主串中的abc[可能没有] 文章 ...
- 字符串朴素模式匹配算法(简单模式匹配算法)
字符串朴素模式匹配算法 一.朴素模式匹配算法(简单模式匹配算法)思想: 将主串中与模式串长度相同的子串搞出来,挨个与模式串对比 当子串与模式串某个对应字符不匹配时,就立即放弃当前子串,转而检索下一个子 ...
- java中KMP模式_朴素模式匹配算法、kmp模式匹配算法、kmp模式匹配算法改进。java代码...
** 朴素模式匹配算法.kmp模式匹配算法.kmp模式匹配算法改进.java代码** 思路过段时间整理~ 可以先看看阮一峰的这篇博客,字符串匹配的KMP算法 package edu.hubu.base ...
- 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法
蛮力法在字符串匹配问题中的应用 字符串匹配问题通常是给定一个n个字符组成的串(称为文本),一个m(m<=n)个字符的串(称为模式),从文本中寻找匹配模式的子串.显然我们需要逐个匹配,这是蛮力算法 ...
- 串--串的定义,顺序、链式存储结构,BF、KMP模式匹配算法(C语言描述)
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.串(String)的定义: 串(String):由零个或多个字符组成的 ...
- 朴素模式匹配与KMP模式匹配算法
一.朴素模式匹配 朴素模式匹配算法 就是遍历主串,然后把待匹配字符串与子串进行比对,先把待匹配子串的第一个字母与主串进行匹配,若匹配成功,则两串的坐标依次 ++,匹配不成功时,主串坐标返回到开始匹配时 ...
最新文章
- android 实现仿QQ登录可编辑下拉菜单
- 构建第一个Spring Boot2.0应用之项目创建(一)
- 架构之路(二):性能
- JavaScript:数组、函数和对象
- 基于SSM的境外电商后台管理系统(含word论文文档)
- 【论文阅读笔记】Beamforming Optimization for Wireless Network Aided by IRS with Discrete Phase Shifts
- Problem - 1077E - E. Thematic Contests(暴力+二分)
- lisp方格网法计算土方量_土地整理中方格网法计算土方量
- 【工程师整活】Ai-WB1-A1S实现离线语音+APP+天猫精灵控制风扇
- H2教程系列(二) 创建数据库
- 物联网卡怎么激活 如何计费
- 51单片机模拟数字键盘输入以及图像显示+Proteus仿真
- JavaScript实现炸金花
- Visual Studio 2022安装到非C盘完全指南
- Android FileProvider配置和当引用包内已经含有FileProvider的多节点解决办法
- 教培行业遇冷,他从中职老师转行了软件测试
- 各厂商接入交换机通过ACL限制端口应用的配置信息
- WIN10/WIN7网络优化工具实现
- android studio 修改打包包名的正确方式
- vue实现两个区域滚动条同步滚动