const int maxn=1e5+5;
int Next[maxn];voidbetter_Getnext(string p)//优化以后的{
int pLen=p.size();
Next[0]=-1;
int k=-1;
int j=0;while(j<pLen-1){if(k==-1|| p[j]==p[k]){++j;++k;if(p[j]!=p[k])
Next[j]=k;else{
Next[j]=Next[k];}}else{
k=Next[k];}}}
int KmpSearch(string s,string p)//匹配函数{
int i=0;
int j=0;
int sLen=s.size();
int pLen=p.size();while(i<sLen && j<pLen){if(j==-1|| s[i]==p[j]){
i++;j++;}else{
j=Next[j];}}if(j==pLen)//找到就返回找到的位置return i-j;elsereturn-1;//没找到返回-1}//没有优化的voidget_next(char s[]){
int len=strlen(s);
a[0]=-1;for(int i=0;i<len;i++){
int j=a[i];while(j!=-1&& s[i]!=s[j]) j=a[j];
a[i+1]=j+1;}return;}