Brute-Force算法:
从主串S的第一个字符开始模式串T中的第一个字符比较,如果相等,则继续依次比较后续的字符;否则从目标串的第二个字符开始重新模式串T的第一个字符进行比较。(S的指针回溯到当前匹配失败的字符的下一位,T的指针回溯到0)。
BF思想:
给S和T分别设置起始下标i和j;
如果S[i] = T [j] ,则i++,j++,继续比较S和T的下一个字符 ;
如果S[i] != T [j],将 i 和 j 回溯 ,i=i-j+1,j=0,再次进行比较 ;
如果 T 中所有字符均比较完 , 则匹配成功 , 返回本轮匹配的起始下标(i-j) ;
否则 ,匹配失败 ,返回 -1;最坏时间复杂度为O(m*n)
代码:
//暴力匹配 BF算法
#include <iostream>
#include <cstring>
#define SIZE 100
using namespace std;
int BF(char S[],char T[]){
int i=0,j=0;
int S_len=strlen(S);
int T_len=strlen(T);
while(i<S_len&&j<T_len){
if(S[i]==T[j]){
i++;
j++;
}
else{
i=i-j+1; //指针回溯
j=0;
}
}
if(j==T_len)
return (i-j);
else
return -1;
}
int main(){
char S[SIZE];
char T[SIZE];
cout<<"请输入主串:";
cin>>S;
cout<<"请输入模式串:";
cin>>T;
int a=BF(S,T);
if(a==-1)
cout<<"匹配失败!" ;
else
cout<<"匹配成功!起始下标为"<<a;
}