KMP模式串匹配算法

KMP算法是一种高效的字符串匹配算法,通过计算模式串的前后缀长度(next数组)来避免不必要的字符比较,从而达到O(m+n)的时间复杂度。本文介绍了KMP算法的思想,包括暴力解法的不足,next数组的计算方法及其在搜索过程中的应用。
摘要由CSDN通过智能技术生成

KMP模式串匹配算法

总有那么一些算法,令人感到惊叹,惊叹于算法的高效,惊叹于算法的解题思路

KMP算法是一个非常高效的模式串匹配算法,它把模式串匹配算法的时间复杂度降为了O(m+n),m是主串长度,n是模式串长度,之前对这个算法十分抗拒,因为很多文章讲得晦涩难懂,阅读了几篇相关文章后,自己尝试着写了一遍算法后,才明白其中的道理

暴力解法

​ 对于一个字符串S"abcdeft",我们想知道它是否包含字符串P"def",首先应该想到的是准备三个指针p,q和m,p指针和q指针指向S串的开头,m指针指向P串的开头,比较q指针和m指针指向的字符,如果相同,q指针和m指针向后移动,如果m指针指向P串的末尾,并且相同,返回p指针,就是P串在S串中的位置如果不想等,p指针后移,q指向p指向的位置,m指针指向P串的开头,继续比较

	int BFSearch(String s, String p) {
   
        int ls = s.length(), lp = p.length();
        for (int i = 0; i < ls - lp; i++) {
   
            int j = 0;
            while(j < lp && s.charAt(i + j<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值