KMP算法

KMP算法是一种用于字符串匹配的高效算法,通过避免暴力法中的重复比较来提升效率。文章介绍了KMP算法的原理,包括next数组的概念和计算方法,以及如何利用next数组进行模式匹配的优化,减少了在主串中不必要的回溯。
摘要由CSDN通过智能技术生成

概述

问题:

在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。

Brute-Force

在这里插入图片描述
要在T中找到P,暴力法的做法是从左到右一个个匹配,在T中用 i 标记,P中用 j 标记,依次比较 i+1 , j+1、i+2 , j+2 ……
当 i+3 , j+3 不同时,暴力法将 i 退回 i+1 ,重置 j ,直到完全相等。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
 * 暴力破解法
 * @param ts 主串
 * @param ps 模式串
 * @return 如果找到,返回在主串中第一个字符出现的下标,否则为-1
 */
int bf(String ts, String ps) {
   
    char[] t = ts.toCharArray();
    char[] p = ps.toCharArray();
    int i = 0; // 主串的位置
    int j = 0; // 模式串的位置
    while (i < t.length && j < p.length
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱骥伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值