模式匹配(Java)——烤馍片算法(KMP算法)

模式匹配(Java)


模式匹配

模式匹配是数据结构中字符串的一种基本运算。
由于字符串我们学习过了,大部分操作都比较清楚,但是模式匹配相对来说操作稍微有些难度,所以我们在这里简单的进行讲述。
模式匹配的具体操作如下:给定一个子串(也称为模式串),要求在某个字符串中找出与该子串相同的所有子串。

我们在此讲述2种常见实现:

  1. 暴力匹配
  2. KMP算法

暴力匹配(BF算法)

主要思想:从主串的第一个元素开始,与模式串第一个元素相比较,相等则逐一比较,若有不同元素,主串回溯至下一个元素,与模式串的一个元素相比较,依次循环。
为了方便讲解,我们针对下面的案例来进行讲解:
要求在寻找模式串第一次在主串出现的位置,未找到则返回-1。


我们把这个过程分为5步:

  1. 首先,我们需要将主串进行遍历。
  2. 主串的每一次遍历中,与模式串进行比较,若相同比较下一个元素。
  3. 如果模式串比较结束,说明模式串成功匹配,返回主串当前下标。
  4. 如果两元素不同,说明此处匹配失败,主串继续遍历下一个元素。
  5. 若主串遍历结束,仍未成功匹配,则说明主串中无该模式串,返回-1。

我们举个例子演示一下,假设主串abdabcda,模式串abcd,模式匹配后应当得到3。

主串当前遍历到的元素/下标 主串的元素 模式串元素 比较
a/0 a a 相等,比较下一个元素
a/0 b b 相等,比较下一个元素
a/0 d c 不相等,回溯,继续遍历主串
b/1 b a 不相等,回溯,继续遍历主串
d/2 d a 不相等,回溯,继续遍历主串
a/3 a a 相等,比较下一个元素
a/3 b b 相等,比较下一个元素
a/3 c c 相等,比较下一个元素
a/3 d d 相等,比较下一个元素
a/3 a \0 模式串比较结束,匹配成功

完整代码如下

public static int bruteForceStringMatch(String str, String pattern) {
   
   
    //如果主串长度不小于模式串,则进入模式匹配
    if (str.length() >= pattern.length()) {
   
   
        //获取两串的字符数组,以便遍历
        char strOfChars[] = str.toCharArray();
        char patternOfChars[] = pattern.toCharArray();

        //两个循环控制变量
        int loopOfStr, loopOfPattern;
        //遍历主串,任意一串遍历结束,则匹配结束
        
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值