#牛客在线求职答疑中心# 知模式串为“aaabab”,主串为“aaabbaabaaababb”,若采用KMP算法进行模式匹
全部评论
知模式串为“aaabab”,主串为“aaabbaabaaababb”,使用KMP算法(Knuth-Morris-Pratt)进行模式匹配时,我们首先需要构建一个部分匹配表(也称为“失败函数”或“next数组”),用于在不匹配时确定模式串的下一个匹配位置。
以下是构建部分匹配表的步骤:
1. 初始化部分匹配表,对于模式串“aaabab”,部分匹配表如下:
- a: 0
- aa: 0
- aaab: 0
- aaaba: 1
- aaabab: 2
2. 接下来,我们使用这个表来进行模式匹配。我们从主串的起始位置开始,尝试将模式串与主串进行匹配。
3. 当我们发现不匹配时,我们查看部分匹配表来确定模式串的下一个匹配位置,而不是从模式串的开始重新匹配。
以下是匹配过程:
- 从主串的第1个字符开始,我们发现“a”与模式串的第一个字符匹配,继续比较。
- 接下来,“aa”与模式串的前两个字符匹配,继续比较。
- 然后,“aaab”与模式串的前三个字符匹配,继续比较。
- 接着,“aaaba”与模式串的前四个字符匹配,但第五个字符不匹配。根据部分匹配表,我们知道下一个匹配位置应该是从模式串的第二个字符开始,即“aab”。
- 继续匹配,我们发现“aab”与主串的第五、六、七个字符匹配,但第八个字符不匹配。根据部分匹配表,下一个匹配位置是“ab”。
- 继续匹配,我们发现“ab”与主串的第九、十个字符匹配,但第十一个字符不匹配。根据部分匹配表,下一个匹配位置是“b”。
- 继续匹配,我们发现“b”与主串的第十二个字符匹配,但第十三个字符不匹配。由于模式串已经完全匹配过一次,我们可以直接跳过前面的匹配,从模式串的第二个字符“a”开始匹配。
- 继续匹配,我们发现“a”与主串的第十四个字符匹配,继续比较。
- 接下来,“aa”与模式串的前两个字符匹配,继续比较。
- 然后,“aaab”与模式串的前三个字符匹配,继续比较。
- 接着,“aaaba”与模式串的前四个字符匹配,但第五个字符不匹配。根据部分匹配表,下一个匹配位置是“aab”。
- 最后,我们发现模式串“aaabab”在主串“aaabbaabaaababb”中的位置是从第七个字符开始的。
使用KMP算法,我们可以高效地找到模式串在主串中的位置,避免了不必要的重复比较。
相关推荐
点赞 评论 收藏
分享
彭于晏前来求offe...:接好运
点赞 评论 收藏
分享
11-18 20:04
泉州职业技术大学 算法工程师
专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了
把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。
现在是学校不是92就扣分的,没必要放前面。
然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历 点赞 评论 收藏
分享
点赞 评论 收藏
分享
查看12道真题和解析