/*
字符串查找 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