algoritmo KMP - programación dinámica

núcleo

Es un algoritmo básico subcadena dar marcha atrás punteros atrás siguiente valor de la matriz para encontrar la subcadena. algoritmo cadena coincidente simple en comparación, no dar marcha atrás puntero principal cadena, el número de sub-cadena de letras se determina por la siguiente matriz de repetir subcadenas prefijos y sufijos.

#include <stdio.h>
#include <string.h>
void get_next(char* T,int *next){
    int i,j;
    i=1;
    j=0;
    next[1]=0;
    while(i<strlen(T)){
        if(j==0 || T[i]==T[j]){
            i++;
            j++;
            next[i]=j;
        }
        else{
            j=next[j];      //j值回溯
        }
    }
}

int Index_KMP(char* S,char* T,int pos){
    int i=pos;
    int j=1;
    int next[255];
    get_next(T,next);
    while(i<=strlen(S)&&j<=strlen(T)){
        if(j==0 || S[i]==T[j]){
            ++i;
            ++j;
        }
        else{
            j=next[j];
        }
    }
    if(j>strlen(T))
        return i-strlen(T)-1;
    else
    {
        return 0;
    }
    
}

int main(void){
    char* s1="hello,world";
    char* s2="world";
    int index=Index_KMP(s1,s2,0);
    printf("%d\n",index);
    return 0;
}
Se han publicado 19 artículos originales · ganado elogios 1 · vistas 3126

Supongo que te gusta

Origin blog.csdn.net/qq_41603639/article/details/104871277
Recomendado
Clasificación