• kmp模板


    //这个模板主串和模式串下标都是从0开始的
    //next数组下标是从1开始的
    char S[maxn],T[maxn];
    int _next[maxn];
    int slen,tlen;
    //求模式串的next数组
    void GetNext(){
        int j=0,k=-1;
        _next[0]=-1;
        while(j<tlen){
            if(k==-1||T[k]==T[j]){
                _next[++j]=++k;
            }else {
                k=_next[k];
            }
        }
    }
    //求模式串在主串中第一次出现的下标,如果没出现返回-1
    int Kmp_Index(){
        GetNext();
        int i=0,j=0;
        while(i<slen&&j<tlen){
            if(j==-1||S[i]==T[j]){
                ++i;
                ++j;
            }
            else j=_next[j];
        }
        if(j==tlen) return i-tlen;
        else return -1;
    }
    //返回模式串在主串中出现的次数
    int Kmp_Count(){
        int ans=0,i=0,j=0;
        if(slen==1&&tlen==1){
            if(S[i]==T[j]) return 1;
            else return 0;
        }
        /*找T串在S串中出现的次数,那么这个for循环就是循环的S串,
        然后对于每一个S的下标,如果T的j位置和它不匹配,
        那么就用一个while循环一直next下去好了,然后如果相等就加一,
        如果j=tlen,就让ans++,然后j=next[j],找下个位置是不是和next[j]位置匹配*/
        for(i=0;i<slen;i++){
            while(j>0&&S[i]!=T[j]){
                j=_next[j];
            }
            if(j==-1||S[i]==T[j]) ++j;
            if(j==tlen){
                ++ans;
                j=_next[j];
            }
        }
        return ans;
    }
    

      


    char S[maxn],T[maxn]; int _next[maxn]; void GetNext(){ int j=0,k=-1; _next[0]=-1; while(j<tlen){ if(k==-1||_next[k]==_next[j]){ _next[++j]=++k; }else { k=_next[k]; } } } int Kmp_Index(){ GetNext(); int i=0,j=0; while(i<slen&&j<tlen){ if(j==-1||S[i]==T[j]){ ++i; ++j; } else j=_next[j]; } if(j==tlen) return i-tlen; else return -1; } int Kmp_Count(){ int ans=0,i=0,j=0; if(slen==1&&tlen==1){ if(S[i]==T[j]) return 1; else return 0; } for(i=0;i<slen;i++){ while(j>0&&S[i]!=T[j]){ j=_next[j]; } if(j==-1||S[i]==T[j]) ++j; if(j==tlen){ ++ans; j=_next[j]; } } return ans; }

      

  • 相关阅读:
    Quartz 基本概念及原理
    quartz-2.2.x 快速入门 (1)
    hive踩过的小坑
    spring profile 多环境配置管理
    win10窗口设置眼睛保护色
    优雅地在markdown插入图片
    Using Spring Boot without the parent POM
    isDebugEnabled作用
    Log 日志级别
    为什么要使用SLF4J而不是Log4J
  • 原文地址:https://www.cnblogs.com/imzscilovecode/p/7954628.html
Copyright © 2020-2023  润新知