• Kmp 模板(邝斌


    1,求第一次匹配的位置

    void getNext(int m){
        int i=0,j=-1;
        Next[0]=-1;
    
    
        while(i < m){
            if(j == -1 || p[i] == p[j])
                Next[++i] = ++j;
            else
                j=Next[j];
        }
    }
    
    
    bool Kmp(int n,int m){
        getNext(m);
        int i = 0,j = 0;
        while(i < n && j < m){
            if(j == -1 || s[i] == p[j]){
                i++;
                j++;
            }
            else
                j=Next[j];
        }
        if(j >= m)  return true;
        else
            return false;
    }


    2,求主串中模式串匹配的次数

    void getNext(int m){
        Next[0]=-1;
        int i = 0,j = -1;
        while(i < m){
            if(j == -1 || p[i] == p[j])
                Next[++i]=++j;
            else
                j = Next[j];
        }
    }
    int Kmp(int n,int m){
        getNext(m);
        int i = 0,j = 0;
        int ans = 0;
        while(i < n && j < m){
            if(j == -1 || s[i] == p[j]){
                i++;
                j++;
            }
            else
                j = Next[j];
            if(j >= m){
                ans++;
                j = Next[j];
            }
        }
        return ans;
    }


    3,求 Next 数组的时候

    Next[++i]=++j;
    
    总是会忘了 ++i,和++j。一定注意别忘了 ++。

  • 相关阅读:
    Mysql安装(msi版的安装)
    001 springBoot的数据库操作
    使用IDEA搭建spring
    spring简介
    rabbitMQ的安装(Windows下)
    mysql过滤数据
    mysql查询数据
    均值滤波,中值滤波,最大最小值滤波
    图像运动去模糊(Motion Deblurring)代码
    数字图像处理,图像锐化算法的C++实现
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6351964.html
Copyright © 2020-2023  润新知