zoukankan      html  css  js  c++  java
  • 【模板】kmp

    不断向失配处转移

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define maxn 1000005
    using namespace std;
    char t[maxn],p[maxn];
    int f[maxn];
    void getfail(char* p,int* f)
    {
        int m=strlen(p),j;
        f[0]=0;f[1]=0;
        for (int i=1;i<m;i++) {
            j=f[i];
            while (j && p[i]!=p[j]) j=f[j];
            f[i+1]=p[i]==p[j]? j+1 : 0;
        }
    }
    void find(char* t,char* p,int* f)
    {
        int n=strlen(t),m=strlen(p);
        getfail(p,f);
        int j=0;
        for (int i=0;i<n;i++) {
            while (j && p[j]!=t[i]) j=f[j];
            if (p[j]==t[i]) j++;
            if (j==m) printf("%d
    ",i-m+2);
        }
    }
    int main()
    {
        scanf("%s",&t);
        scanf("%s",&p);
        find(t,p,f);
        for (int i=1;i<=strlen(p);i++) printf("%d ",f[i]);
        return 0;
    }
  • 相关阅读:
    Java08_Lambda表达式
    Java基础02
    Java基础07
    JAVA基础06
    Java基础05
    Java基础01
    面向对象与面向过程
    Java常识2
    CSS常用属性记录
    geoserver发布热力图服务
  • 原文地址:https://www.cnblogs.com/LQ-double/p/6079316.html
Copyright © 2011-2022 走看看