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; }
算法不考慮時間復雜度和空間復雜度,這是最簡單也是我們很容易想到的一種算法思想。
初出茅廬,請多照顧。