kmp算法比较重要的一步骤,需要根据模式串构建next或nextval数组
通过前后缀公共字符串最大长度来进行构建的,前后缀概念是分成2个的,字符串前缀和字符串后缀
字符串前缀的意思是,不包含字符串最后的元素,但是必须有前边元素组成的所有组合,组合由第一个元素,向后进行组合
字符串后缀跟前缀反之,不包含字符串第一个元素,但是必须有后边元素组成的所有组合,组合有最后一个元素,向前进行组合
举例:
字符串 “Mbabak”
前缀字符串组合不包含最后字符'k', 组合有 M,Mb,Mba,Mbab,Mbaba ;
后缀字符串组合不包含第一个字符‘M’, 组合有 k,ak,bak,abak,babak;
前后缀公共字符串最大长度的意思是:前缀字符串组合中和后缀字符串组合中,两者共有的最长的字符串的长度,字符串 “Mbabak”的前缀和后缀中没有相同的字符串
再举个例子
字符串 “abcfabc”
前缀字符串组合不包含 最后字符‘c’ , 组合有 a,ab,abc,abcf,abcfa,abcfab
后缀字符串组合不包含 第一个字符‘a’, 组合有 c,bc,abc,fabc,cfabc,bcfabc
在前后缀组合中,公共的字符串(两者都拥有的字符串) abc, 所以此时前后缀公共字符串是abc ,长度为3