2021-07-30

18 篇文章 0 订阅
15 篇文章 0 订阅

KMP算法的感悟。
解释:子串就是从主串取出的一小部分。
先上题目了解题目:从主串中查询出子串的位置。
直接上思路
例如:有两个字符串A,B。
1,A为主串 2,B为子串
A=”abcadefg“ B=“adef”
需要用到辅助的数组,我们只需要移动子串中的的下标和主串进行匹配就行。
拿到子串,用两个下标进行判断,一个下标指向-1,另外一个下标指向0。
之所以用-1并不是放在数组中的,而是一开始的判断,继续看!
代码开始:
1,由于要 遍历整个子串,我们用一个循环,循环的条件是那个指向0的一定小于子串的长度。【细细品】
2,循环内进行判断,如果这个变量等于-1 或者 子串下标为这个变量 等于子串下标为另外一个变量。
3,如果成立,这两个变量自身加一,接下来为辅助数组进行赋值,将0的那个变量作为下标,将-1的这个变量赋值给它。
4,如果不成立,就将那个为-1的变量成为辅助数组的下标赋值给-1的这个变量。
5,循环结束;

经过上面的步骤就已经算出了辅助数组。
之所以一开始用-1,是因为我们当前的算法,是采用辅助数组的值,如果不为-1那么我们没法去判断。

既然辅助数组已经知道了,接下来就是整体的判断。
就是上面的两个字符串,初始值都是从0开始遍历。
再次上代码:
1,循环,循环的条件是两个都是初始化为0的变量分别都不超过主串和子串的长度。
2,判断,如果第一个变量为-1的时候 或者 主串和子串相等的时候,这两个变量同时自身加一。
3,如果不相等的时候,将用一个子串的那个变量作为辅助数组的下标赋值给子串的那个变量.【因为这个子串的变量有可能成为-1,所以成立的判断需要判断是否为-1.】
4,循环结束
5,循环外面判断,如果 -1的这个变量大于子串的长度-1的时候,我们就可以输出那个0的变量减去-1的那个变量。
6,否者,就是没找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值