暴力匹配(Brute-Force-Match)是字符串匹配算法裏最基礎的算法,雖然效率比較低,但勝在方便理解,在小規模數據或對時間無嚴格要求的狀況下能夠考慮。算法
#include <stdio.h> #include <string.h> int bf(char *l,char *s); int main(void) { char s1[201],s2[201]; //根據須要設定數組大小 printf("母串:"); scanf("%s",s1); printf("子串:"); scanf("%s",s2); int a=strlen(s1),b=strlen(s2),re=0; if(a>=b) //母串長度要比子串長 { re=bf(s1,s2); if(re==1) printf("%s是%s的子串",s2,s1); return 0; } else printf("沒法匹配"); return 0; } int bf(char *l,char *s) { if(!strcmp(l,s)) //若是兩個字符串相同直接返回 return 1; int ll=strlen(l),sl=strlen(s),di=ll-sl; for(int i=0;i<=di;i++) { int temp=0; for(int j=0;j<sl;j++) { if(l[i+j]==s[j]) continue; else { temp=1; break; } } if(temp==1) continue; else if(temp==0) return 1; } printf("子串不存在"); return 0; }
每次從子串與母串的第一個字符開始比較,如果匹配成功則繼續下一個字符的匹配;如果匹配失敗則從母串的下一個字符開始與子串的第一個字符從新匹配,循環往復直到匹配成功或者匹配失敗。數組
咱們設子串長爲m,母串長爲n,同時m比n小的多。code
在最好狀況下,子串與母串的失配都是發生在第一個字符處,時間複雜度爲O(m+n)。
在最壞的狀況下,即子串每一次與母串失配都是在最後一個字母時,時間複雜度爲O((m*n)。字符串