开发者社区> 问答> 正文

为什么KMP算法中n-next的前缀为最小覆盖子串

为什么KMP算法中n-next的前缀为最小覆盖子串

展开
收起
知与谁同 2018-07-20 13:35:18 1478 0
1 条回答
写回答
取消 提交回答
  • 给定一个字符串s,从小到大输出s中既是前缀又是后缀的子串的长度。 借用KMP算法的next数组,设s的长度为n,则s串本身必定满足条件。其他满足条件的子串都有个特征,就是该子串的最后一个字符肯定与s的最后一个字符相同。这正是next数组发挥作用的时候。从n - 一位既最后一位开始回滚,若s[next[n-一]] == s[n-一],则子串s[0,一,二,...,next[n-一]]是满足条件的子串。然后判断s[next[next[n-一]]] == s[n-一]是否成立,这样一直回滚,直到next[next[.....next[n-一]]] == -一为止。把答案从大到小存下来,再从小到大输出即可
    2019-07-17 22:56:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载