数据结构之字符串模式匹配

本文介绍了字符串模式匹配中的brute-Force算法和KMP算法。详细阐述了brute-Force算法的工作原理及其实现过程,并通过示例解释了其存在的回溯问题。接着,文章重点讲解了KMP算法,包括如何利用next数组计算模式串的最长相同前后缀子串,以及KMP算法避免回溯的特点。最后,提供了KMP算法的代码实现和运行结果。
摘要由CSDN通过智能技术生成

程序源代码:点击打开链接

1.引入

    字符串模式匹配。首先我们引入目标串,模式串的概念,而字符串模式匹配就是查找模式串在目标串中的位置。

2.brute-Force算法

    brute-Force算法,我的理解是这样的。首先设目标串target="t0t1t2t3t4",pattern="p0p1p2"。将p0与t0比较,若相同,则继续比较p1与t1。若不同,则从t1与p0开始比较。下面我们举个例子:

    target="aababcd",pattern="abcd";用target[i],pattern[j]分别表示target与pattern对应位置的字符(i,j初始为0)。

    首先target[i]的a与pattern[j]的a相同,于是i++,j++。此时target[i]的a与pattern[j]的b不同,于是i=i-j+1,j=0。比较target[i]的a与pattern[j]的a相同,于是i++,j++。此时target[i]的b与pattern[j]的b相同,于是i++,j++。此时target[i]的a与pattern[j]的c不相同,于是i=i-j+1,j=0。此时target[i]的b与pattern[j]的a不相同,于是i++,j=0。此时target[i]的a与pattern[j]的a相同,于是i++,j++。此时,target[i]的b与pattern[j]的b相同,于是i++,j++。此时target[i]的c与pattern[j]的c相同,于是i++,j++。此时target[i]的d与pattern的d相同,于是i++,j++。测试j=pattern.length=4,表示在目标串target中找到了模式串pattern,于是返回模式串在目标串中的位置3。

    下面是Brute-Force算法描述:

    设目标串中的字符为ti(0<=i<n),模式串中的字符为pj(0<=0<m,m<=n),将他们比较:

(1)若ti=pj,继续比较ti+1与pj+1,直到j=m,则“ti-m+1……ti”与“p0……pm-1”匹配成功,返回模式串在目标串中匹配子串序号i-m+1。

(2)若ti!=pj,表示t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值