Horspool算法
第一步:对于给定的长度为m的模式和在模式及文本中用到的字母表,按照下面的shitftable算法构造移动表
第二步:将模式表与文本的开始对齐
第三步:重复下面过程,直到发现了一个匹配子串或者模式到达了文本的最后一个字符以外。从模式的最后一个字符开始,比较模式和文本中相对应的字符,直到:所有m个字符都匹配(然后停止) 或者 遇到了一对不匹配的字符,若字符c是当前文本中和模式的最后一个字符相对齐的字符,则从移动表的第c列中取出当前单元格中t(c)的值,然后将模式沿着文本向右移动t(c)个字符的距离。
t(c)为 1.模式的长度m(当字符c不包含在模式的前m-1个字符中)
2.模式前m-1个字符中最右边的字符c到模式最后一个字符的距离(其他情况)
#include<stdio.h>
int table[127];
int ShiftTable(char *p, int m)
{
for(int i=0;i<127;i++)
table[i] = m;
for(int j=0;j<=m-2;j++)
table[p[j]] = m-1-j;
return *table;
}
in