BF算法
BF算法的设计思想:
将主串的第i个字符与子串的第一个字符比较
1.若相等,继续逐个比较后续字符;
2.若不等,主串的下一个字符和子串的第一个字符比较;
3.当i>子串的长度时,说明匹配成功,否则匹配失败。
BF算法的时间复杂度:
若主串长度为n,子串长度为m,则时间复杂度为O(n*m)。
代码
#include<stdio.h>
#include<string.h>
#define MAXSIZE 255
typedef struct//定于串的结构体类型
{
char string[MAXSIZE+1];
int length;
}SString;
SString S,T;
int indexBF(SString S,SString T)
{
int i=1;
int j=1;
while(i<=S.length&&j<=T.length)
{
if(S.string[i]==T.string[j])//当匹配成功时
{
i++;
j++;
}
else
{
i=i-j+2;//当匹配不成功时,i回到上次匹配的下一个位置
j=1;//j回溯到第一个位置
}
}
if(j>T.length)//匹配成功,返回子串匹配的第一个字符在主串的位置
{
return i-T.length;
}
else
return 0;
}
int print(SString &S,SString &T)
{
S.length=0;
T.length=0;
printf("请输入主串和子串:\n");
scanf("%s",S.string);
scanf("%s",T.string);
S.length=strlen(S.string);
T.length=strlen(T.string);
return 1;
}
int main()
{
print(S,T);
if(indexBF(S,T))
printf("匹配的子串的位置是:%d\n",indexBF(S,T));
else
printf("can not match!\n");
return 0;
}