KMP算法中的模式串移动数组
前言
提示:这里可以添加本文要记录的大概内容:
字符串的子串定位称为模式匹配,模式匹配可以有多种方法。简单的算法可以使用两重嵌套循环,时间复杂度为母串与子串长度的乘积。而KMP算法相对来说在时间复杂度上要好得多,为母串与子串长度的和。
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目描述
KMP算法中的模式串移动数组
二、输入/输出
1.输入
代码如下(示例):
abaabcac
2.输出
代码如下(示例):
0 1 1 2 2 3 1 2
#include<stdio.h>
#include<string.h>
char s[110];
int next[110];
void g_next(char *s,int *next,int s_len)
{
int i = 0,j = -1;
next[0] = -1;
while(i < s_len)
{
if(j == -1 || s[i] == s[j])
{
++i; // 1 2 3 4 5 6 7 8
++j; // a b a a b c a c
next[i] = j; // 0 1 1 2 2 3 1 2
}
else
{
j = next[j];
}
}
}
int main()
{
scanf("%s",s);
int s_len = strlen(s);
g_next(s,next,s_len);
for(int t = 0;t < s_len ;t++)
{
printf("%d ",next[t]+1);
}
return 0;
}