用于在一大串字符中查询一段字符。
一大串字符用s[]表示
需要查询的一段字符用p[]表示
int next[]数组
构造next数组
int j;代表指向需要查询的字符段当中一个个字符的位置
void kpm匹配算法()
{
//构造next数组
for(int i=2,j=0;i<=n;i++) //next数组与需要查询的字符串有关
{
while(j&&p[i]!=p[j+1])j=next[j]; //如果当前字符不相等,查询的字符退一位
if(p[i]==p[j+1])j++;
next[i]=j;
}
//匹配过程
for(int i=1,j=0;i<=m;i++)
{
while(j&&s[i]!=p[j+1])j=next[j];
if(s[i]==p[j+1])j++;
if(j==n)
{
//查找结束
}
}
}