前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KMP再思考:为什么要用最长公共前后缀,为什么要用公共前后缀

KMP再思考:为什么要用最长公共前后缀,为什么要用公共前后缀

作者头像
执生
发布2020-09-27 10:50:03
1.2K0
发布2020-09-27 10:50:03
举报
文章被收录于专栏:立权的博客

1.如果不用最长的,则会丢失可匹配部分,也就是本来可能匹配的,结果却不能匹配。

2.因为需要保证比较位置之前的字符串都一致了,如果不用公共前后缀,则可能导致比较位置之前的字符串不一致。

理由其实很简单,因为把前缀移到后缀的位置,而比较指针不变,如果后缀(这时已经不是真正的后缀了)的结束不是贴着比较指针的话,就

不能保证比较指针前的字符和待比较串一致。

选择公共前缀是必定的,因为如果想要在待比较串中找出模式串,那么一定要和模式串的开头匹配,也就是和前缀匹配。

但是选择的不是公共后缀的话,也就是结尾不贴近比较指针的话,就会导致上面的问题。

3.就算使用最长串,是否还是会有遗漏的情况存在呢?

那么我们可以假设使用最长串,看看有没有遗漏的情况发生。

假如在过程中发生了匹配。所谓的匹配是指在比较指针之前要和待比较串完全匹配,如果不完全匹配就没有意义,下图的红色框和长的绿色框是假设的匹配情况。

但是根据我们 公共前后缀的定义,应该出现如下的最长公共前后缀,所以这种匹配如果存在,只能说明我们之前找的不是最长公共前后缀,比公共前后缀短。

但是当前情况下,并不成立,因为两者根本不相等。如果是相等的话,就会如上所言,之前找到的不是最长前后缀。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档