java 前缀匹配_字符串匹配(KMP)算法及Java实现

本文介绍了KMP算法的基本概念、字符串的前缀与后缀、部分匹配表的构建以及算法的实现过程。KMP算法是一种在主文本字符串中查找词W出现位置的字符串查找算法,利用部分匹配表避免了不必要的字符比较。Java实现中,通过getNext函数计算部分匹配值,并在kmp函数中进行字符串匹配。
摘要由CSDN通过智能技术生成

一、什么是KMP算法?

维基百科的解释是:在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置。此算法通过运用对这个词在不匹配时本身就包含足够的信息来确定下一个匹配将在哪里开始,从而避免重新检查先前已经匹配过的字符。

二、字符串的前缀与后缀

前缀:字符串除了最后一个字符的全部头部组合;

后缀:字符串处理第一个字符的全部头部组合;例如

f9e9df1aea042bfdf5838a2f68414145.png

f97b63424291cefa0d8737867acb1bc9.png

三、字符串部分匹配表

"部分匹配"的实质是,有时候,字符串头部和尾部会有重复。比如,"ABCDAB"之中有两个"AB",那么它的"部分匹配值"就是2("AB"的长度)。搜索词移动的时候,第一个"AB"向后移动4位(字符串长度-部分匹配值),就可以来到第二个"AB"的位置。所以我们需要找到一个字符串中每一个子串的匹配值,即找到字符串的部分匹配值表,这样的话我们在下面匹配字符串的过程中就可以根据匹配表来进行跳跃了,而不必一个一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值