字符串匹配 – BF算法
BF(Brute Force)算法是字符串模式匹配中比较简单的一种算法。它从主串的第一个字符开始和模式串进行匹配,若匹配成功,则返回第一个字符位置,否则主串指针回溯到后一个位置从第二个字符开始和模式串进行匹配,依此下去,直到和模式串匹配成功或到主串的末尾为止。
BF算法如下:
- // 算法描述
- int index(SString S, SString T)
- {
- i = 0, j = 0;
- while (i < S.Length && j < T.Length) {
- if (S[i] == T[j]) {
- i++;
- j++;
- } else {
- i = i - j + 1; // 主串指针回溯
- j = 0;
- }
- }
- if (j > T.Length)
- return i - T.Length;
- else
- return -1;
- }
- // 具体实现参考[1]
- char *strstr(const char *s1, const char *s2)
- {
- int l1, l2;
- l2 = strlen(s2);
- if (!l2)
- return (char *)s1;
- l1 = strlen(s1);
- while (l1 >= l2) {
- l1--;
- if (!memcmp(s1, s2, l2))
- return (char *)s1;
- s1++;
- }
- return NULL;
- }
BF算法在一般情况下时间复杂度为O(n+m),但在最坏情况下,由于主串指针需要不停的回溯,因此其时间复杂度为O(nm)。
[1]:算法实现参考,Linux中C语言库函数strstr()。
若非注明,本博客文章均属原创,转载请以链接形式注明出处
本文地址:http://www.juliuschen.com/archives/20.html