La coincidencia de patrones sola KMP-

pat secuencia esquemática, txt representa una cadena de texto, nex [i] denota la pat delante de 0 ~ (i-1) el sufijo común más larga.

El número o ubicación de KMP buscan Pat apareció en txt. NEX fallar cadena modo de puntero array ac máquina automática similares, cuando se produce una falta de coincidencia, la posición de salto tiene el mismo prefijo que coincida con el sufijo más largo. Nex proceso de búsqueda de un conjunto de proceso de auto-adaptación es pat.

Aprendizaje Enlace: Portal de   diferentes convenciones atención a este artículo de blog convenios y códigos programados

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=1e6+7;
char str[maxn];
struct kmp{
    char  pat[maxn];
    int pat_len;
    int nex[maxn];
    void GetNext(){
        int i=0,j=-1;
        pat_len=strlen(pat);
        nex[0]=-1;
        while(i<pat_len){
            while(j!=-1&&pat[i]!=pat[j]) j=nex[j];
            nex[++i]=++j;
        }
    }
    int Count(char *txt){///返回模式串在主串中出现的次数(可重叠出现)
        int txt_len=strlen(txt),i=0,j=0,cnt=0;
        while(i<txt_len){
            if(j!=-1&&txt[i]!=pat[j]) j=nex[j];
            else ++j,++i;
            if(j==pat_len) {
                cout<<i-pat_len+1<<endl;
            }
        }
        return cnt;
    }
    int Index(char *txt){///返回模式串在主串中首次出现的位置
        int txt_len=strlen(txt),i=0,j=0,cnt=0;
        while(i<txt_len&&j<pat_len){
            if(j!=-1&&txt[i]!=pat[j]) j=nex[j];
            else ++j,++i;
        }
        if(j==pat_len) return i-pat_len;
        else return -1;
    }
}run;
Publicado 96 artículos originales · ganado elogios 11 · vistas 2256

Supongo que te gusta

Origin blog.csdn.net/weixin_43769146/article/details/104095593
Recomendado
Clasificación