#include <iostream>
using namespace std;
void Next(char str[],int next[])
{
int i = 0;
int j = -1;
next[0] = -1;
int len = strlen(str);
while(i < len-1)//这里要注意i<len-1 的原因
{
/*
设置next值分两种情况:
1.当j=-1 也就是第一个字符就匹配失败的情况,(j = next[j] = 0),那么下一个肯定要和
第一个字符匹配 .那么下一个next值(++i ++j) next[i] = j
2.当str[i] == str[j] 就是说前j个字符都匹配了,那么next[++i] = ++j;
*/
if(j == -1 || str[i] == str[j])
{
next[++i] = ++j;
}
else
/*这里就是说明匹配失败了,那么接下来要和哪个字符匹配呢?*/
j = next[j];
}
}
int main()
{
int next[8];
Next("abaabcac",next);
for(int i = 0; i < 8; i++)
cout<<next[i];
cout<<endl;
return 0;
}
KMP Next 再次详解
最新推荐文章于 2023-08-01 10:48:07 发布