字符串处理:布鲁特--福斯算法
基本思想:
其基本思想是从主串的第一个字符起与模式串的第一个字符比较,若相等,则继续逐个字符的后续比较,否则从主串的第二个字符起与模式串的第一个字符重新开始比较,直至模式串中的每个字符依次和主串中的一个连续的字符序列相等时为止,此时称为匹配成功,否则称为匹配失败。
以字符数组存储字符串,实现朴素的模式匹配算法。
1 int Index(char S[], char T[], int pos) 2 /*查找并返回模式串T在主串S中从pos开始的位置(下标),若T不是S的子串,则返回-1 */ 3 { 4 i = pos; j=0; // i , j 分别用于指示出主串字符和模式串字符的位置(下标) 5 slen = strlen(S); tlen = strlen(T); //计算主串和模式串的长度 6 while(i < slen && j <tlen) 7 { 8 if(S[i] == T[j]) 9 { 10 i++;j++; 11 } 12 else 13 { 14 i = i - j + 1; //主串字符的位置指针回退 15 j = 0; 16 } 17 } 18 if(j >= tlen) //匹配成功 19 return i - tlen; 20 return -1; //匹配失败,返回 - 1 21 }
时间复杂度:
在最好的情况下匹配算法的时间复杂度为O(n + m).最坏的情况下的时间复杂度为O( n × m),对该算法进行改进的模式匹配算法又称为KMP算法,其改进之处在于:每当匹配过程中出现相比较的字符不相等时,不需要回溯主串字符的位置指针。而是利用已经得到的“部分匹配”的结果,将模式串向后“滑动”尽可能远的距离,再继续进行比较。
转载于:https://www.cnblogs.com/xiehuan-blog/p/9011782.html
字符串处理:布鲁特--福斯算法相关推荐
- 【算法视频】字符串模式匹配--布鲁特.福斯算法
2.4.字符串模式匹配 资讯网址:www.qghkt.com 腾讯课堂:https://qghkt.ke.qq.com/20个常用算法 模式串(或子串)在主串中的定位操作通常称为串的模式匹配,它是各种 ...
- java 类数组_Java常用类-字符串、日期类、算法及数组工具类等
大家好,乐字节的小乐又和大家见面了.这次要给大家讲述的是Java常用类. 主要有以下知识点: Ø 字符串相关类(String .StringBuffer.StringBuilder) Ø 算法及数组工 ...
- python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...
本文实例讲述了JS使用栈判断给定字符串是否是回文算法.分享给大家供大家参考,具体如下: /*使用栈stack类的实现*/ function stack() { this.dataStore = []; ...
- 字符串集合中相互包含关系算法
字符串集合中相互包含关系算法 先介绍下使用场景,源文件是一个excel表格,要根据某一列的值生成正则表达式,为保证正则表达式的准确性,被包含的数据肯定是不能直接生成正则表达式的,例如,产科和妇产科,如 ...
- Python:实现字符串Z 函数或 Z 算法(附完整源码)
Python:实现字符串Z 函数或 Z 算法 def z_function(input_str: str) -> list[int]:z_result = [0 for i in range(l ...
- 数据结构(C语言版)严蔚敏(字符串的模式匹配算法--KMP算法)
数据结构(C语言版)严蔚敏(字符串的模式匹配算法–KMP算法) 1.暴力匹配算法 // 暴力匹配算法 int Index2(SString S,SString T) {// S是主串,T是子串int ...
- 最长回文字符串——马拉车(Manacher)算法
最长回文字符串--马拉车(Manacher)算法 说来惭愧,都快要毕业了才写第一篇博客... 回文串 回文串呢,就是在一个字符串中,左半部分和右半部分是镜像对称的字符串,比如abcba,就是一个已c为 ...
- c语言多组数据判断回文字符串,详解判断回文字符串跟回文数算法的C语言代码...
详解判断回文字符串和回文数算法的C语言代码! 一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define ...
- 字符串的模式匹配,KMP算法
KMP算法是模式匹配的一种改进的算法,所谓的模式匹配也就是对于两个字符串主串S和模式串T.从主串的S的pos个字符起和模式串中的第一个字符进行比较,如果相等,则继续比较后面的字符,否则从主串的下一个字 ...
最新文章
- JAVA基础9-封装(3)
- [译] 2019 年的 9 大设计趋势
- mock平台架构及实现
- Celery-------项目目录
- JAVA软件工程师应该具备的技能有哪些?
- 这个温州人牛上天!30多颗北斗卫星发射成功,有他的功劳!
- java httputil_Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型
- 风控建模:催收评分卡(四)--变量整理除了跟数据获取相关外还跟什么有关系?
- iOS - Swift NSRect 位置和尺寸
- mysql双向复制_MySQL 双向复制
- 东风小康为什么是dfsk_重庆造乘用车首次乘坐专列出口欧洲 100辆东风风光ix5抵达德国...
- 淘宝店铺装修全屏海报代码怎么用的设置方法
- jQuery控制video视频(快进,回退,倍速播放等)
- openGL绘制地球
- 基于基因组数据的癌症亚型发现聚类研究
- VENDORNPC.LUA --随身商人
- radius系列:freeradius测试
- IE if注释判断( [if gte IE 8] )的解释网上的完全乱七八糟啊!
- 孢子:银河大冒险 for Mac模拟经营游戏
- 腾讯校招笔试题之纸牌游戏
热门文章
- OpenJudge 2796: 数字求和
- Mirantis Certification summary
- Struts2中ActionContext和ServletActionContext
- HTML5 标签、事件句柄属性以及浏览器兼容情况速查手册
- 艰难的原创——谈互联网创业
- android jni jstring 转 char*
- android fitsSystemWindows的使用
- WinLaucher启动
- UltraEdit中OracleSQL的syntax文档
- MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)