BF算法:应用于字符串匹配。
基本思想:如图所示
主串和子串指针同时往后走,相同则同时++;
当主串与子串不匹配时,则匹配失败
此时i回退到刚才位置的下一个
j回退到0
继续此操作直到将主串跑完
找到则返回主串第一个匹配字符串第一个字符的下标
匹配失败则返回-1
BF算法的时间复杂度相对较大,为O(m*n);
代码展示:
//BF算法 时间复杂度 O(n*m)
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
int BF(const char *s,const char *sub,int pos)
{
int i = pos;
int j = 0;
int lens = strlen(s);
int sublen = strlen(sub);
while(i<lens && j<sublen)
{
if(s[i] == sub[j])
{
i++;
j++;
}
else
{
i = i-j+1;
j= 0;
}
}
if(j>=sublen)
{
return i-j;
}
else
return -1;
}
int main()
{
char *s = "ASSDFGHJFGHJK";
char *sub ="SDFG";
printf("%d\n",BF(s,sub,0));
return 0;
}
测试样例:
主串:“abcabcabcdef”
子串:“abcd”
主串:“abcabcabcabcdef”
子串:“abcdf”