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

    2017.4.7:

    看了好几遍的kmp,又忘了。。。

    这次的理解:求next数组,求模式串的对称性(前缀和后缀的最大公共长度),next[i]表示模式串mo[1--i]这个子串的前缀和后缀的最大公共长度。


    给这个月凑够20篇博客,手撸以便KMP,也当作温习一下。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    char N[1005],M[1005],lenN,lenM;
    int next[1005];
    
    void getNext()
    {
        int p=0;
        for(int i=2;i<=lenM;i++)
        {
            while(p>0&&M[p+1]!=M[i])
                p=next[p];
            if(M[p+1]==M[i])
                p++;
            next[i]=p;
        }
    }
    
    bool KMP()
    {
        getNext();
        cout<<"*"<<endl;
        int p=0;
        for(int i=1;i<=lenN;i++)
        {
            while(p>0&&M[p+1]!=N[i])
                p=next[p];
            if(M[p+1]==N[i])
                p++;
            if(p==lenM)
                return 1;
        }
        return 0;
    }
    
    int main()
    {
        scanf("%s%s",N+1,M+1);
        lenN=strlen(N+1);
        lenM=strlen(M+1);
        cout<<KMP()<<endl;
        for(int i=1;i<=lenM;i++)
            cout<<next[i]<<" ";
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    13.numpy线性代数和绘图
    12-numpy矩阵
    11-numpy视图与副本
    10-numpy排序搜索
    day12 异常 模块 单例
    day11面向对象 多态 静态方法 (三)
    day 10 面向对象(=)
    day9 面向对象
    day8 文件
    day7 地址 名片管理系统
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/6479504.html
Copyright © 2011-2022 走看看