最小覆盖子串的长度

来源:互联网 发布:qq封号解封软件 编辑:程序博客网 时间:2024/05/07 04:46

最小覆盖子串:对于某个字符串s,它的最小覆盖子串指的是长度最小的子串p,p满足通过自身的多次连接得到q,最后能够使s成为q的子串。

比如:

对于s="abcab",它的最小覆盖子串p="abc",因为p通过在它后面再接上一个p(即重叠0个字符),可以得到q="abcabc",此时s是q的子串。

对于s="ababab",它的最小覆盖子串为p="ab"。

根据KMP算法的next数组的定义,设字符串s的长度为n,则next[n] = next[n - 1],n-1为s的最后一位。

next[n]表明s[0,1,2,...,next[n]-1] == s[n-next[n],...,n-1],设这两段分别为s1和s2。

若s1和s2的长度之和小于s的长度,则说明s1和s2分别为不重叠的前缀和后缀,则最小覆盖子串必为s截去s2之后得到的前缀。

若s1和s2的长度之和大于等于s的长度,则最小覆盖子串也必为s截去s2之后得到的前缀。

以上两种情况都可以推出这个结论:最小覆盖子串是s的前缀,它的长度为n-next[n]。


http://blog.csdn.net/fjsd155/article/details/6866991 详细解释可以看这篇博文。