zoukankan      html  css  js  c++  java
  • 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。一定注意别忘了 ++。

  • 相关阅读:
    .net 项目中cookie丢失解决办法
    .net core 时间格式转换
    .net core 分布式性能计数器的实现
    Netty实现原理浅析
    DotNetty项目基本了解和介绍
    xml解析
    StackExchange.Redis性能调优
    C#string转换为Datetime
    C# SocketAsyncEventArgs类
    Des 加密cbc模式 padding
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6351964.html
Copyright © 2011-2022 走看看