描述
给定一个字符串,求KMP算法(快速模式匹配)中各个字符对应的next值。
字符串各个next值用来表示当子串匹配失败时能够快速找到重新匹配的位置,其值为当前字符的后缀子串与前缀子串的最长公共子串长度。如ABCAC中,第二个A字符的后缀有:A、CA、BCA,前缀有:A,AB,ABC,最长的公共子串是A,因此next值为1。
在子串匹配时第一次发生失配时:
ABCADABCAB
ABCAC
由于C前面的字母A的next值为1,因此接下来只要继续从下标为1字符B继续与D比较。
ABCADABCAB
ABCAC
为了方便,可以把前面的next值存到下一个字符对应的位置,第一个字符对应的next值则为-1:
以下为字符串“ABACDABABE”对应的next数组值:
A B A C D A B A B E
-1 0 0 1 0 0 1 2 3 2
输入
一行由大写字母组成的字符串(长度不超过100)。
输出
输出各个next值。
样例输入
ABACDABABE
样例输出
-1 0 0 1 0 0 1 2 3 2