KMP算法中next函数的求解,next[0]=-1,改函数的性质
next[n],其实就是求从前往后数的字符串和从后往前数的字符串完全对应的最长位数(从后数和从前数不能完全相同),举例如a[5]=ababbc,
next[0]=0(也可以是-1,网上的教程表示无所谓)
next[1]=0,这个串(ab)从前缀数有a,ab,从后缀数有b,ab……不能相同,所以没一样的,为0.
next[2]=1,这个串(aba)从前缀数有a,ab,aba,从后缀数有a,ba,aba……不能相同(去掉aba和aba),还剩下a[0]即a与a[3]即a完全对应,为1.
next[3]=2,这个串(abab)从前缀数有a,ab,aba,abab从后缀数有b,ab,bab,abab……不能相同(去掉abab和abab),还剩下ab和ab完全对应,为2.
next[4]=0,这个串(abab)从前缀数有a,ab,aba,abab,ababb从后缀数有b,bb,abb,babb,ababb……不能相同(去掉ababb和ababb),没一样的,为0.
next[5]=0,原理同上。
View Code
1 void pre(int n) 2 { 3 int i,j=-1; 4 next[0]=-1; 5 i=0; 6 while(s[i]) 7 { 8 if(j==-1||s[i]==s[j]) 9 { 10 i++; 11 j++; 12 next[i]=j; 13 } 14 else j=next[j]; 15 } 16 }
转自csdn