【问题描述】
串的模式匹配算法实现(KMP算法)
【输入形式】
第一行输入主串s;
第二行输入模式串t;
第三行输入起始位置pos;
【输出形式】
输出模式串t的next值(以空格分隔)
输出模式匹配结果
【样例输入1】
ababcabcacbab
abcac
1
【样例输出1】
-1 0 0 0 1
6
BF算法的原理简单但效率较低。原因是 i 和 j 的回溯,即在某趟匹配失败后,对于 s 串要回溯到本趟开始字符的下一个字符,t 串要回溯到第一个字符。然而这些回溯很多是不必要的。
改进的模式匹配过程由Knuth,Morris,Pratt同时设计的,简称KMP算法,其特点是,每当一趟匹配过程中Si和Tj匹配失败后,指针i不动,模式t向右“滑动”,使Tk和Si对准继续向右比较。
比较过程如下:
第一趟比较,主串,子串均从起始位置开始比较,匹配失败时主串 i=2,子串 j=2。
第二趟比较,主串 i 保持不动,不回溯,子串向前滑动至 j=0的位置,开始对应字符的比较。一直到发生匹配失败时,主串 i=6,子串 j=4。