0x01 bf演算法簡介
bf演算法是用於在a字串尋找b字串的一種演算法,時間複雜度為o(n+m),正如它的名字一樣,是乙個很暴力的演算法。
0x02 暴力的體現
為啥說bf這個演算法暴力呢,不單單是因為名字,最主要的是體現在處理字串的方式上。
舉個栗子。位置0
1234
5678
字串aca
bcab
xbc字串bab
x如果讓bf演算法從a串中尋找b串的話,它會怎麼做呢?
首先,取a,b字串中的第乙個字元 a[0],b[0] 進行比較,也就是 『c』 和 『a』,很明顯是不相等的。
然後,取a串第二個字元 a[1]與b串中第乙個字元b[0] 進行比較,也就是 『a』 和 『a』,這是相等的。
接著,取a串第三個字元 a[2]與b串中第二個字元b[1] 進行比較,也就是 『b』 和 『b』,這也是相等的。
在接著,取a串第四個字元 a[3]與b串中第三個字元b[2] 進行比較,也就是 『c』 和 『x』,這是不相等的。
那麼我們就會對a,b字串當前下標所在的位置進行一次操作:
a.將a串的位置回溯到原來a,b兩個字元剛開始進行比較的位置即a串所在位置 - b串所在位置 + 1 = 3 - 2 +1 = 2,也就是a[2]處。
b.將b串的位置歸0,即b[0]處。
然後,取a串第三個字元 a[2]與b串中第乙個字元b[0] 進行比較,也就是 『b』 和 『a』,這是不相等的。
…(同上,一直到找到字串b位置)
0x03 **
#include
#include
using
namespace std;
intbfs
(char
* s1,
char
* s2)
else}if
(s2[j]
=='\0'
)return i-j;
//返回的應當是字串2首字元位置,而不是尾
else
return0;
}int
main()
0x04 bf演算法高階
kmp演算法
BF暴力匹配演算法
有同學問到我字串匹配的問題,一時間竟然想不起來bf演算法了,現在回顧一下,基本思想 現有模式串s 和待匹配串t 首先t 從s 的開頭開始匹配,如果相應位置匹配成功,則二者各向前走一位,如果失配,t串回溯到開頭,s 串回溯到上 次匹配成功的的開頭的下乙個位置。include include inclu...
BF演算法與KMP演算法
using system namespace kmp else count if j lenb 1 return i lenb else return 0 stathread static void main string args lenb p1.length,p2.length reval km...
BF演算法與KMP演算法
bf演算法思想 實現 public class bf int i 0 int j 0 i與j都從0號位置開始 while ilength j else if j sub.length 當j sub的長度時,說明sub陣列已經遍歷完了 else public static void main stri...