/*
字符串查找 BF算法
*/
#include <stdlib.h>
#include <stdio.h>
int strfind(char *str, char *partner)
{
int pos = -1;
int i = 0;
int j = 0;
size_t slen = strlen(str);
size_t plen = strlen(partner);
while (i < slen && j < plen)
{
if (str[i] == partner[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == plen)
{
pos = i - j;
}
return pos;
}
int main()
{
char *str = "abcadef";
char *par = "cad";
int pos = strfind(str, par);
return 0;
}
字符串查找 最普通的算法
串 A 为 "abcadef",而串 B 为 "cad"
最理想的时间复杂度 O(n),n 表示B 的长度,即第一次匹配就成功。
BF 算法最坏情况的时间复杂度为 O((m - n + 1)*n),n 为串 B 的长度,m 为串 A 的长度。这种情况下,两个串每次匹配,都必须匹配至串 A 的最末尾才能判断匹配失败,因此运行了 n*m 次。
效率不算高 后边会给出优化----KMP
本文介绍了BF算法,一种基本的字符串查找方法。在给定串A abcadef 和目标串B cad 的例子中,阐述了算法的工作原理。虽然BF算法在最坏情况下的时间复杂度高达O((m-n+1)*n),但它为理解更高级的字符串搜索算法如KMP奠定了基础。
404

被折叠的 条评论
为什么被折叠?



