BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是將目標串S的第一個字符與模式串T的第一個字符進行匹配,若相等,則繼續比較S的第二個字符和 T的第二個字符;若不相等,則比較S的第二個字符和T的第一個字符,依次比較下去,直到得出最后的匹配結果。BF算法是一種蠻力算法。
首先S[1]和T[1]比較,若相等,則再比較S[2]和T[2],一直到T[M]為止;若S[1]和T[1]不等,則T向右移動一個字符的位置,再依次進行比較。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],則匹配成功;否則失敗。
該算法最壞情況下要進行M*(N-M+1)次比較,時間復雜度為O(M*N)。
#include<iostream> using namespace std; int BF(char *s,char *t); int main(void) {char *t="abcd";char *s="abcabcde";cout<<BF(s,t)<<endl;getchar(); } /* 功能:從源字符串s中找子串t,找到返回首次匹配的源字符串的位置,找不到則返回-1; 如t為abcd ,s為abcabcd,匹配成功,返回s中首次匹配的位置4 */ int BF(char *s,char *t) {int i=0,j=0;while(i<strlen(t)&&j<strlen(s)){while(t[i]!=s[j]){j=j-i+1;i=0;}i++;j++;}if(i==strlen(t))return j-i+1;elsereturn -1; }
?