三段式搞定KMP算法so eazy
- 开发
- 29
-
让我们先看这样一道题:
光题目就让人头皮发麻,这道题的传统解法是这样的:
已经完全看不懂了吧quq,没事下面教大家用三段式轻松解决这类问题!
我们先列这样一个三段式表格:
S |
a |
b |
a |
a |
c |
PM |
|
|
|
|
|
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
- pm:重复对称的字母个数;
- next-1:初值为-1的next数组;
- next:初值为0的next数组(要求的);
首先先创建一个空的字母队列
然后把a拿进来,重复对称的字母个数是0;
a
S |
a |
b |
a |
a |
c |
PM |
0 |
|
|
|
|
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
再把第二个字母b拿进来,这时候是ab,重复的字母个数还是为0个;
ab
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
|
|
|
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
这时候把第三个字母a拿进来,这时候是aba,两个a关于b对齐,重复对称的字母就是a;
aba
那么此时重复的字母个数是1个;
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
1 |
|
|
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
把第四个字母a拿进来,这时候字母a关于ba对称,重复对称的字母个数为1;
abaa
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
1 |
1 |
|
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
把第5个字母c拿进来,没有重复对称的字母了,个数为0;
abaac
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
1 |
1 |
0 |
next-1 |
|
|
|
|
|
next |
|
|
|
|
|
next-1里面的数就是PM的数往右边整体挪一位;空的位置填上-1,如下表:
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
1 |
1 |
0 |
next-1 |
-1 |
0 |
0 |
1 |
1 |
next |
|
|
|
|
|
next里面的数就是next-1里的数整体加一;
S |
a |
b |
a |
a |
c |
PM |
0 |
0 |
1 |
1 |
0 |
next-1 |
-1 |
0 |
0 |
1 |
1 |
next |
0 |
1 |
1 |
2 |
2 |
那么next的函数值就求出来了:就是01122,是不是非常的eazy。OVO
原文地址:https://blog.csdn.net/weixin_62182040/article/details/138198781
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:https://www.suanlizi.com/kf/1783797672331841536.html
如若内容造成侵权/违法违规/事实不符,请联系《酸梨子》网邮箱:1419361763@qq.com进行投诉反馈,一经查实,立即删除!