串、数组、广义表
案例引入
字符从下标为1的位置开始存储。
注意最终i的位置
算法实现:
1.
2.从主串pos位置开始匹配:
注意:最后判断是否查询成功的if语句时,应该是>,而不是>=
算法时间复杂度:
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 255
typedef struct
{
char ch[MAXLEN+1];
int length;
}SString;
// BF算法
int Index_BF(SString S,SString T)
{
int i = j =1;
while(i<=S.length&&j<=T.length)
{
if(S.ch[i]==T.ch[j])
{
++i;
++j;
}
else
{ // 回朔
i = i-j+2;
j=1;
}
}
if(j>T.length)
{ // 如果子串查询到尾部
return i-T.length;
}
else
{
return 0;
}
}
KMP算法:
数组:
广义表:
(2)、(5)叫共享广义表(6)叫递归广义表