KMP算法初步认知

本文详细解读了KMP算法在寻找字符串匹配中的应用过程,通过具体实例逐步展示了算法的实现步骤,包括初始化临时字符串、更新匹配位置等关键操作。重点介绍了算法的核心思想及其优势,为读者提供了深入理解并实际应用该算法的指南。

在字符串S(string)中找到匹配的字符串P(pattern)

第一种想法:// 利用最简单的循环结构

    for(m=0; m<...;m++)    // m -> start position

        for(i=0; i<...; i++)    // offset from m

            if(S[m+i] == P[i])....

            else ....

------------------------------------------------------------------------------------------------------------------------------

第二种:KMP算法

    

------------------------------------------------------------------------------------------------------------------------------

我遇到不懂得术语总会先百度一下,然后再在维基上找资料,那么我们也以它上面的例子作为我这个分析方法的实践:

S: ABC ABCDAB ABCDABCDABDE
P: ABCDABD


Step 1: m=0, i=3 出现不匹配,形成临时字符串 ABC,明显首尾完全不同,p = 0,m = m + i - p, m = 3;

Step 2: m=3, i=0, p=-1(如果还是0就停在那个位置了,所以用了一个技巧,使之向右移动一位), m = 4;

Step 3: m=4,i=6, "ABCDAB", p=2, m=4+6-2=8;

Step 4: m=8,i=3, "AB", p=0, m=11;

Step 5: m=11,i=6,"ABCDAB", p=2, m=15;

Step 6: m=15,i=6, 找到匹配的了!如果还想找下一个,令 m = m + i ,重复这样的步骤即可,注意将这些位置保存起来,比如第一个匹配到的字符串位置是 15 !

转载于:https://my.oschina.net/u/660818/blog/81285

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值