• kmp
    void getnx(string str,int *nx)
    {
    int len=str.length();int i=0,k=-1;nx[0]=-1;
    while(i0&&str[i]!=p[j])j=nx[j];
        if(str[i]==p[j])j++;
        if(j==len2)ans++,j=nx[len2];
    }
    return ans;
    }
  • exkmp
    #include
    #include
    #include
    #include
    using namespace std;
    const int maxn=50001;
    int nxt[maxn],ex[maxn];
    void GETNEXT(char *str)
    {
    int i=0,j,po,len=strlen(str);
    nxt[0]=len;
    while(str[i]==str[i+1]&&i+1