数据结构与算法基础之kmp算法
学习来源:
数据结构与算法基础(青岛大学-王卓)
地址:
https://www.bilibili.com/video/BV1nJ411V7bd?p=22&spm_id_from=pageDriver
背景:
实现视频里老师的伪代码,并不完全一样,但基本雷同。
更新
2021/7/1
第一次发布
代码:
Kmp.h
#ifndef _KMP_H_
#define _KMP_H_
int Position(char *String, char *MatchStr);
int BFMatch(char *String, char *MatchStr);
void GetNext(char *str, int *next);
int KmpMatch(char *String, char *MatchStr);
int KmpPosition(char *String, char *MatchStr, int *i, int *j);
#endif
Kmp.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "CommonFunc.h"
#include "Kmp.h"
int KmpMatch(char *String, char *MatchStr)
{
NULLPointOut(String, "KmpMatch", "String");
NULLPointOut(MatchStr, "KmpMatch", "MatchStr");
size_t nextLen = strlen(MatchStr);
int next[nextLen];
GetNext(MatchStr, next);
int k = 0, i = 0, j = 0, p = 0;
k = KmpPosition(String, MatchStr, &i, &j);
while(k >= 0)
{
p = next[j];
if(p < 0)
{
i++;
j = 0;
k = KmpPosition(String, MatchStr, &i, &j);
}
else if(String[i] == MatchStr[p])
{
i++;
j = p + 1;
k = KmpPosition(String, MatchStr, &i, &j);
}
else if(String