BF算法(模式匹配)
BF算法 (Brute-Force算法)
一种简单的模式匹配算法,目的是寻找模式串p是否在目标串s中有出现。
思想:先从第一个字符开始匹配,如果p[j]==s[i],那么继续向下比较,一旦不相等,即回溯到目标串的下一个字符,重复工作。
成功条件:当循环结束时,判断j的值与模式串p的长度是否相等,如果相等,说明匹配成功到了模式p的最后一个字符。
返回值:返回模式串在目标串中出现的位置。
具体实现如下:
#include <iostream> #include <string> using namespace std; int index(string s,string p) { int i=0,j,k; while (i<s.length()) { for (j=i,k=0;j<s.length() && k<p.length() && s[j]==p[k];j++,k++) ; if (k==p.length()) { return i; } i++; } return 0; } int index1(string s,string p) { int i=0,j=0; while (i<s.length() && j<p.length()) //j一旦超过模式长度,代表匹配成功,跳出循环 { if (s[i]==p[j]) { i++; j++; } else { i=i-j+1; //回溯 j=0; } } if (j>=p.length()) { return i-p.length(); //返回匹配成功的位置 } else return 0; } int main() { string s,p; cin>>s>>p; cout<<"BF1算法匹配结果为:"<<index(s,p)<<endl; cout<<"BF2算法匹配结果为:"<<index1(s,p)<<endl; return 0; }
算法不考虑时间复杂度和空间复杂度,这是最简单也是我们很容易想到的一种算法思想。
初出茅庐,请多照顾。