zoukankan      html  css  js  c++  java
  • 复习KMP

    KMP刚学的时候,看不懂。

    再看,哇!原来是这样!

    用的时候,忘了。

    为了不再跌倒,我决定,记住吧。。。

    在我看来,KMP一般用于字符串匹配时的防超时优化。

    他的精髓就是,利用已经匹配的信息,简化这之后的匹配过程。

    小试牛刀:P3375 【模板】KMP字符串匹配

    #include<iostream>
    #include<cstdio>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=1e6+9;
    int net[N];
    char s[N],t[N];
    void get_net()
    {
        int i=2,j=0;
        int len=strlen(t+1);
        for(;i<=len;i++)
        {
            while(j&&t[j+1]!=t[i]) j=net[j];
            if(t[j+1]==t[i]) j++;
            net[i]=j;
        }
    }
    void match()
    {
        int lens=strlen(s+1),lent=strlen(t+1);
        for(int i=1,j=0;i<=lens;i++)
        {
            while(j&&s[i]!=t[j+1]) j=net[j];
            if(s[i]==t[j+1]) j++;
            if(j==lent)    printf("%d
    ",i-lent+1);
        }
    }
    int main()
    {
        cin>>(s+1)>>(t+1);
        get_net();
        match();
        int lens=strlen(s+1),lent=strlen(t+1);
        for(int i=1;i<=lent;i++)
        printf("%d ",net[i]);
    
        return 0;
    }
  • 相关阅读:
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    java第三次作业
    Java第二次作业
    Java第一次作业
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7677344.html
Copyright © 2011-2022 走看看