串的查找很重要 所有要掌握BF算法
代码实现:
#include <stdio.h>
#include <assert.h>
#include <string.h>
//朴素查找算法BF
//函数返回值为在主串中找到之后第一个字符的下标
//pos:从主串开始查找的下标
int BF(const char *str,const char *sub,int pos)//时间复杂度O(m*n) m:主串的长度 n:子串的长度
{
assert(str != NULL && sub != NULL && pos >= 0);
int i = pos;
int j = 0;
int lenstr = strlen(str);
int lensub = strlen(sub);
while(i < lenstr && j < lensub)
{
if(str[i] == sub[j])
{
i++;
j++;
}
else//如果不相等时i要回退到i-j+1的位置 j从0开始
{
i = i - j + 1;
j = 0;
}
}
if(j >= lensub)
{
return i - j;
}
else
{
return -1;
}
}
int main()
{
//测试用例
printf("%d\n",BF("ababcabcdabcde","abcd",0));
printf("%d\n",BF("ababcabcdabcde","abcdf",3));//没有找到时返回-1
printf("%d\n",BF("ababcabcdabcde","abc",7));
return 0;
}
运行结果: