• 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。一定注意别忘了 ++。

  • 相关阅读:
    安装Hive2及配置HiveSever2
    sqoop语句
    Sqoop配置
    IO流的概述
    List集合的简单使用
    包装类
    访问权限修饰符
    接口
    抽象类
    final关键字
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6351964.html
Copyright © 2020-2023  润新知