KMP的next数组
一如既往先上代码:123456789void next(){ next[1]=0; next[2]=1; i=2; j=1; n=strlen(o); while(i<n) { if(j==0||o[i]==o[j]) {i++; j++; next[i]=j;} else j=next[j]; }}
说明
程序做到了两点:
- 寻找next数组
- 用KMP算法自调用
而只要稍加修改就可以用于判断最长字符串,代码如下12345678910while (i < strlen(a) && j < strlen(user)) { if (a[i] == user[j]) { i++; j++; continue; } else { if (j != 0) j = next[j]; else { i++; j = 1; } } }if (j >= strlen(user)) return i-strlen(user);else return -1;