关注
模式串的`nextval`数组(也称为部分匹配表或前缀函数)用于KMP算法中,它记录了模式串的前缀集合与自身后缀集合的匹配长度。下面我们来计算给定模式串`'abcaabbcabcaabdab'`的`nextval`数组。
首先,我们初始化`nextval`数组,长度与模式串相同,并将第一个元素设为0。然后,我们逐个字符比较模式串的前后部分,来填充`nextval`数组的其余部分。
模式串:`'abcaabbcabcaabdab'`
初始`nextval`:`[0, , , , , , , , , , , , , ]`
下面是计算过程:
1. `nextval[1] = 0` (已初始化)
2. `a`与`a`匹配,`nextval[2] = 1`
3. `b`与`a`不匹配,查看`nextval[1]`的值(即0),所以`nextval[3] = 1`
4. `c`与`a`不匹配,查看`nextval[2]`的值(即1),所以`nextval[4] = 2`
5. `a`与`a`匹配,`nextval[5] = 3`
6. `a`与`b`不匹配,查看`nextval[3]`的值(即1),所以`nextval[6] = 1`
7. `b`与`b`匹配,`nextval[7] = 2`
8. `b`与`c`不匹配,查看`nextval[5]`的值(即3),所以`nextval[8] = 3`
9. `c`与`a`不匹配,查看`nextval[6]`的值(即2),所以`nextval[9] = 2`
10. `a`与`a`匹配,`nextval[10] = 3`
11. `a`与`b`不匹配,查看`nextval[7]`的值(即2),所以`nextval[11] = 2`
12. `b`与`c`不匹配,查看`nextval[8]`的值(即3),所以`nextval[12] = 3`
13. `c`与`a`不匹配,查看`nextval[9]`的值(即2),所以`nextval[13] = 2`
14. `a`与`b`不匹配,查看`nextval[10]`的值(即3),所以`nextval[14] = 3`
15. `b`与`d`不匹配,查看`nextval[11]`的值(即2),所以`nextval[15] = 2`
16. `d`与`a`不匹配,查看`nextval[12]`的值(即3),所以`nextval[16] = 3`
17. `a`与`b`不匹配,查看`nextval[13]`的值(即2),所以`nextval[17] = 2`
最终得到的`nextval`数组为:
`[0, 0, 1, 1, 2, 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2]`
这个数组可以帮助KMP算法在文本搜索过程中跳过不必要的比较,从而提高搜索效率。
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 如果春招能重来,我会___ #
2817次浏览 22人参与
# 面试官拷打AI项目都会问什么? #
860次浏览 24人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
26874次浏览 476人参与
# 除了线上,还能去哪些地方投简历 #
1688次浏览 20人参与
# 你觉得最好用的AI编程工具是_ #
518次浏览 18人参与
# 你和你的mentor相处模式是__ #
4574次浏览 34人参与
# mt对你说过最有启发的一句话 #
114871次浏览 867人参与
# 你的mentor是什么样的人? #
61402次浏览 794人参与
# 你会因为行情,降低找工作标准吗? #
3816次浏览 29人参与
# 如何排解工作中的焦虑 #
321247次浏览 2751人参与
# 实习第一天,你在干什么 #
2864次浏览 20人参与
# 双非本科的出路是什么? #
230559次浏览 1655人参与
# 技术岗笔试题求解 #
116037次浏览 1122人参与
# 机械校招之路总结 #
125313次浏览 2106人参与
# 你有哪些缓解焦虑的方法? #
60701次浏览 914人参与
# 宣讲会你有哪些意向不到的收获 #
25118次浏览 80人参与
# 你收到了团子的OC了吗 #
1603355次浏览 11858人参与
# 一觉醒来,秋招难度下降一万倍…… #
147685次浏览 786人参与
# 哪些公司在招寒假实习? #
95283次浏览 767人参与
# 0offer互助地 #
774808次浏览 4764人参与
# 0经验如何找实习? #
89907次浏览 938人参与
查看10道真题和解析