给定模式的前缀函数是否有可能出现类似这样的内容,
0 0 1 2 3 0 1 2 3 4 5 3 4 5
6 7 0 1 2
在4 5之后的上述前缀函数中,是否只有6或0的可能性?如果在4 5之后有可能存在例如3(小于5且大于0)的情况,那么该模式应该如何。
我认为模式只与此类似,
a b a b a b a b c a
0 0 1 2 3 4 5 6 0 1
感谢。
答案 0 :(得分:4)
这是一个示例模式,您在6之后有失败链接4:
a b c a b c d a b c a b c a
0 0 0 1 2 3 0 1 2 3 4 5 6 4
答案 1 :(得分:1)
你的具体例子是不可能的。当你从所需的前缀表开始构造一个字符串时,你得到
0 0 1 2 3 0 1 2 3 4 5 3 4 5 6 7 0 1 2
a b a b a c a b a b a
表中与长度p
前缀对应的条目给出了该前缀的最宽边b
的宽度,比如w
。下一个条目只能是w+1
(如果b
是可扩展的),0(如果没有前缀匹配),或者比b
的某个边界的宽度多一个。
因此,如果table[p]
包含length-p前缀最宽边框的宽度(table[0] = -1
),那么table[p+1]
就是1+table[p]
之一,{{1 },...,1+table[table[p]]
。