字符串简单匹配算法
来源:互联网 发布:淘宝直播间怎么进入 编辑:程序博客网 时间:2024/06/06 01:27
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n),KMP匹配算法,可以证明它的时间复杂度为O(m+n).。
简单匹配算法
先来看一个简单匹配算法的函数:
int Index_BF ( char S[ ], char T[ ], int pos ){int i = pos, j = 0;while ( S[i+j] != '\0'&& T[j] != '\0')if ( S[i+j] == T[j] ) j ++; // 继续比较后一字符 else { i ++; j = 0; // 重新开始新的一轮匹配 } if ( T[j] == '\0') return i; // 匹配成功 返回下标else return -1; // 串S中(第pos个字符起)不存在和串T相同的子串}
此算法的思想是直截了当的:将主串S中某个位置i起始的子串和模式串T相比较。即从 j=0 起比较 S[i+j] 与 T[j] ,若相等,则在主串 S 中存在以 i 为起始位置匹配成功的可能性,继续往后比较( j逐步增1 ),直至与T串中最后一个字符相等为止,否则改从S串的下一个字符起重新开始进行下一轮的"匹配",即将串T向后滑动一位,即 i 增1,而 j 退回至0,重新开始新一轮的匹配。
例如:在串S=”abcabcabdabba”中查找T=” abcabd”(我们可以假设从下标0开始):先是比较S[0]和T[0]是否相等,然后比较S[1] 和T[1]是否相等…我们发现一直比较到S[5] 和T[5]才不等。如图:
当这样一个失配发生时,T下标必须回溯到开始,S下标回溯的长度与T相同,然后S下标增1,然后再次比较。如图:
这次立刻发生了失配,T下标又回溯到开始,S下标增1,然后再次比较。如图:
这次立刻发生了失配,T下标又回溯到开始,S下标增1,然后再次比较。如图:
又一次发生了失配,所以T下标又回溯到开始,S下标增1,然后再次比较。这次T中的所有字符都和S中相应的字符匹配了。函数返回T在S中的起始下标3。如图:
0 0
- 字符串简单匹配算法
- 简单的字符串匹配算法
- 简单的字符串匹配算法
- 字符串匹配算法 BF算法或者简单匹配
- 字符串模式匹配的简单算法
- boost字符串匹配算法简单示例
- 字符串匹配的KMP算法(简单易懂)
- [算法] 字符串的简单模式匹配
- 字符串匹配——Brute-Force 简单匹配算法
- [算法]简单的字符串近似匹配算法实现
- Sunday算法---简单高效的字符串匹配算法
- Sunday算法---简单高效的字符串匹配算法
- 字符串匹配算法——KMP算法简单解释
- 算法 字符串匹配算法
- 几种字符串匹配算法性能简单实验对比
- [Erlang 学习笔记]Erlang 简单实现 KMP--字符串匹配算法
- 字符串模式匹配BF算法的简单实现
- 字符串之简单模式匹配算法(BF)
- java Condition源码分析
- JAVA设计模式(11):结构型-装饰模式(Decorator)
- 第二章 线性表
- android 百度地图 在打包签名后key验证失败的解决方案
- linux 命令系列之 echo(40)
- 字符串简单匹配算法
- hbase down机 重启zookeeper 解决的异常
- ORA-19909: datafile 1 belongs to an orphan incarnation 一例
- linux 命令系列之 history(41)
- Android GPU加速实现图像颜色传递(Color transfer)
- android比较好的博客
- 临时变量与复制构造函数
- linux 命令系列之 alias 和 bash快捷键(42)
- Map容器(hash_map)