KMP算法初学者如何理解

本文是作者作为Java初学者对KMP算法的理解。KMP算法用于在一个长字符串中高效地查找子串,避免了暴力求解的双重循环。通过next数组,KMP算法确定了在主串和子串不匹配时可以跳过的步骤,从而减少计算时间。文章以实例解释了next数组的计算和应用,帮助初学者理解KMP算法的核心思想。
摘要由CSDN通过智能技术生成

关于 KMP 算法的个人理解(Java初学者)

大二上学期的时候,学习数据结构,偶尔接触了KMP算法,那个时候没特别理解,为了应付考试,就仅仅是看了前缀后缀那个知识点,刚刚打算好好看一看,因为最近在学习java,老师提到了一句,自己刚刚查阅资料研究的时候,感觉对于小白来说很难理解,一下是我的一些看法。

KMP算法的用处
在一个长的字符串里寻找一个短的字符串,有一种暴力解法,举个例子。
** a b a b a**
a b a
在ababa中寻找aba,可以这样对照。(粗的是一样的)如下图;
在这里插入图片描述
这个暴力求解,我们可以看出,只要主串足够长,那么在主串中寻找子串的位置就越难!假设主串长度是m,而子串长度是n , 那么这个计算相当于是一个双重循环!(如上图ababb中寻找abb)
先从主串a开始依次对比子串的abb,如果不对就从主串的b开始再依次对比子串的abb。就有点类似于
for(ababb){
for(abb){
}
}
这样显然是很慢的,那么有没有一种方法,因为子串是固定呢,能不能在往

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值