求next数组
void getNext(string str, int* next)
{
// next[i]的求解方法是,找到从str[0]~str[i-1]的公共最长匹配前缀和后缀的长度
next[0]=-1; // next[0]定义为-1
next[1]=0; // next[1]肯定是0
// 只要待匹配串还没到底,都要求相应位的next[i]值
int i=2;
while(i<str.length()){
int max_len=i-1; // 最长长度为i-1
int len,j;
for (len = max_len;len >= 1;len--) // 从最长的情况开始搜索
{
for (j = 0;j < len;j++)
{
if(str[j]!=str[j+i-len]) // 只要有任何一位不对应相等,那么当前len就不成立,试探下一个len
break;
}
// 如果上一个循环是正常退出,即都对应相等了,那就把当前的len赋给next[i],并不再往下试探了
if(j==len)
{
next[i]=len;
break;
}
}
if (len < 1) // 如果len=1的情况都不成立,那next[i]肯定是0了
{
next[i]=0;
}
i++;
}
}