C语言KMP字符串匹配算法


KMP算法模版

Kmp算法是用于求一长字符串和短字符串按一定规律匹配的情况,可以求是否能在长串中找到短串

         其思想就是通过一个next数组对短串进行处理,找到短串前后某两个位置是否具有相同的前后缀,用next[i]表示最后以b[i]结尾的前缀和后缀与模式串前缀的最长匹配数。

这样两字符串在匹配是,若在长串与短串某位置发现两字符不同,不能继续匹配时,短串下标i不一定要回到短串的首字符继续匹配,短串可以跳到next[i]的位置。从而降低算法的时间复杂度,从原来的O(n*m)降低到O(n+m)。//n,m表示两串长度

代码如下:

#include
#include
const int Max=10010;
char str[Max],str1[Max];//这里匹配的的浪字符串,Kmp算法也可用于两个数组等。
int nextt[Max];
void Next(int len)
{
    int i=-1,j=0;//将i初始化为-1,是为了维护两个指针i,j,便于对next数组进行初始化,保证i在j前
    nextt[0]=-1; //将短串首字符的next值赋值为-1,便于后面Kmp()函数循环中i跳到到短串首时做特殊处理
    while(j
希望对大家有所帮助。



你可能感兴趣的:(C语言算法)