BF算法(Brute Force)

算法思想:运用模式串和目标串进行逐个比较,当模式串匹配失败,则回溯到目标串的下一位,两个循环直到匹配成功或者跳出循环查找失败。

#include 
#include
using namespace std;
#define MAXSIZE 250
typedef char STR[MAXSIZE + 1];

int assign(STR T, char *c)//T[0]用于存储位数,使串字符从数组第一位开始计起
{
if (strlen(c) > MAXSIZE) return 0;
else
{
T[0] = strlen(c);
for (int i = 1; i <= T[0]; ++i)
T[i] = *(c + i - 1);
return 1;
}
}

int BF(STR S, STR T,int pos)
{
int i = pos; int j = 1;
while (i <= S[0] && j <= T[0])
{
if (S[i] == T[j])
{
++i;
++j;
}//相同则继续匹配下一位
else
{
i = i - j + 2;
j = 1;
}//不相同则回溯
}
if (j > T[0]) return  i - T[0];//返回匹配位置
else return 0;

return 0;
}

int main()
{
STR S,T;
assign(S, "bbdcvaaabbaba" );
assign(T, "abba");
int flag;
flag=BF(S,T,1) ;
if(flag)
 cout << "匹配成功,在目标串的第" <"位数开始首次匹配!"<else cout << "匹配失败,目标串中不存在该模式串!" << endl;
return 0;
}

时间复杂度为O(m*n),在一些数据量交少的地方可以用,但是一旦数据量达到一定量级,基本吃不动,这个时候就要去学习一下KMP算法了。

你可能感兴趣的:(简单算法)