KMP算法及POJ上相关的题目

这篇博客详细介绍了KMP算法,包括next数组的构造和算法证明,并给出了POJ上4道相关的编程题目,涉及模式串匹配、前缀后缀判断及重复串计算的应用。
摘要由CSDN通过智能技术生成

KMP算法的介绍与POJ上一些相关的题目

一 :KMP算法的介绍

KMP算法的核心是构造next[]数组。先搞清楚next数组的含义。例如:next[j] = k;这样的一个式子表示的含义是:当主串中第i个元素与模式串中的第j个元素匹配失败时,应该保持i指针不动,而将模式串中的j指针移动到k这个位置。然后将主串中第i个元素与模式串中的第j个元素匹配。若匹配的话就同时移动i和j指针。不匹配的话,再次计算next[k] = ?.....依次进行。

所以KMP算法的本质就是主串中i指针不回溯。

      下面来一步步的证明next[]数组的构造过程。

第一步:

      设主串S = “s1s2…sn”,   T= “t1t2…tm”.

若满足:

(1) “si-j+1…si-1” = “t1..tj-1”;

(2)  “t1t2…tk-1”= “tj-k+1tj-k+1…tj-1”;(1<k<j)

在同时满足(1),(2)的条件下,可以直接比较si 和 tk

若对于任意的1<k<j,条件(2)都不满足,则直接比较si和t1

第二步:

模式串t的next函数:

当s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值