字符串与简单模式匹配(BF,KMP算法)

字符串和多维数组

这次总结的知识归纳是关于字符串和多维数组的。

首先字符串。

字符串是n个字符组成的有序序列,其所包含的字符个数就是串的长度。字符串中任意连续的字符组成的子序列称为该串的子串。包含子串的串为主串。

字符串的存储结构:

1.顺序串。这很简单就是用数组存储字符串中的字符。

2.表示串的长度。用一个变量表示串的实际长度。

3.也可以用一个特殊的符号作为终止符。我们常用的便是\0。

 

接下来就是比较重要的模式匹配。

BF算法。

主串S和模式T。

主串设置一个位置i。模式T也设置一个j。

从i等于0,j等于0开始。i++,j++开始比较,如果全部匹配成功,则结束。若中途有字符不相同。i回溯到1。j回溯到0,重新开始匹配。若又匹配失败,i回溯到2,j回溯到0重新匹配。以此类推。直到匹配成功或者主串全部比较完。   这个BF算法要进行多趟匹配。

KMP算法

KMP算法的开端与BF算法一致。不同的是从匹配失败以后。KMP算法失败之后与BF算法不同,进行移动时,KMP算法要比较模式T中的最大相同前缀子串和左子串。其中i可以不回溯,模式向右滑动到新的比较起点。一个next数组。当j等于0时next[j]等于-1。最大相同前缀子串和左子串的长度等于next[j]。构造一个数组。每当匹配失败时i不用回溯,j回溯到改数组的值。以此类推。比较到结束。

具体的代码实现比较复杂。在这就不做介绍,简单的说明一下思路。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值