KMP(1)-前缀函数(Prefix function)KMP的next函数

前言:

   前段时间学习和字符串相关的算法,自然学到了KMP算法(解决单字符串匹配问题)。这里简单记录一下,方便以后回忆。

  先给出二个名词,模式串(P), 文本串(T)。 比如ABC是否是ASDABC的子串,这里ABC是模式串(P),ASDABC是文本串,也叫被匹配串。

引入:

  KMP算法其实就是两个部分,①:前缀函数(求前缀数组)②:匹配部分。

   那么什么是前缀函数呢??这是本篇文章的内容,为什么需要这个前缀函数这里先不解释,下篇文章讨论。

前缀函数:

  前缀函数的功能是求出”模式串“的next[ ]数组。
  首先要了解三个概念,前缀、后缀、匹配值。
  ①本算法中的"前缀"和"后缀": "前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。
  //比如ababa的前缀a,ab,aba,abab (注意没有ababa) 后缀有b,ba,aba,baba(注意没有ababa) 

  ②匹配值:就是字符串中"前缀"和"后缀"的最长的共有元素的长度。对于ababa来说就是3,说明ababa的“前3个字符”与“后3个字符”相同aba.(PS:这里我们也可以看出为什么前缀不包括最后一个字符,后缀不包括第一个字符了,因为包括的话就没意义了。。ababa前5个字符等于后5个字符,匹配值等于它长度就好了。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值