promotion for 35 years coder-Day23-kmp算法

#include
#include
using namespace std;

void getNext(char *pattern, int len, int* next)
{
    int i = 0;
    int j = -1;
    next[0] = -1;
    
    while(i < len)
    {
        if (j == -1 || pattern[i] == pattern[j])
        {
            next[++i] = ++j;
        }
        else
        {
            j = next[j];
        }
    }
    
    return;
}

int kmp_cmp(char* src, int srcLen, char *pattern, int patLen)
{
    int next[patLen] = {0};
    getNext(pattern, patLen, next);
    
    int i = 0;
    int j = 0;
    while(i < srcLen && j < patLen)
    {
        if (j == -1 || src[i] == pattern[j])
        {
            i++;
            j++;
        }
        else
        {
            j = next[j];
        }
    }
    
    if (j == patLen)
    {
        return i - j;
    }
    
    return -1;
    
    
    
}


int main() {
    char src1[] = {"afesfsljijibsbse"};
    char pat1[] = {"bsbse"};
    cout << kmp_cmp(src1, strlen(src1), pat1, strlen(pat1)) << endl;
    char pat2[] = {"fsefsefs"};
    cout << kmp_cmp(src1, strlen(src1), pat2, strlen(pat2)) << endl;
    char pat3[] = {"afesfs"};
    cout << kmp_cmp(src1, strlen(src1), pat3, strlen(pat3)) << endl;
    char pat4[] = {"ljijibs"};
    cout << kmp_cmp(src1, strlen(src1), pat4, strlen(pat4)) << endl;
    
    
}

你可能感兴趣的:(刷题,算法,c++,自动驾驶)