包含:bf,bf改進版本,kmp
bf:暴力搜尋
bf改:當判斷匹配失敗的字串是不是與首字母相同 若不同,繼續bf演算法; 若相同,直接將首字母移到當前位置
kmp:通過字首與字尾發現待匹配字串本身的特性,匹配失敗時一次性移動多個字元以減少工作量
# hstring為長字串;substring為待匹配的字串
def bf(hstring: str, substring: str):
hlen = len(hstring)
slen = len(substring)
if (hlen == 0) or (slen == 0) or (hlen < slen):
return none
for i in range(hlen - slen + 1): # 母串逐一字元匹配
is_find = true
for j in range(slen): # 迴圈子串
if hstring[i + j] != substring[j]:
is_find = false
break # 如果匹配失敗,之前所做的所有匹配工作全部捨棄,轉而開始母串下乙個字元的重新匹配
if is_find:
return i
return false
def bf_plus(hstring: str, substring: str):
hlen = len(hstring)
slen = len(substring)
if (hlen == 0) or (slen == 0) or (hlen < slen):
return none
i = 0
while i < hlen - slen:
is_find = true
for j in range(slen): # 迴圈子串
ch1 = hstring[i + j]
ch2 = substring[j]
if ch1 != ch2:
is_find = false
# 當匹配失敗時,檢查敗的字串是不是與首字母相同,若不同,繼續bf演算法;若相同,直接將首字母移到當前位置
if (ch1 == substring[0]) and (j >= 1):
ipos = i + j
i = ipos - 1
break
i += 1
if is_find:
return i - 1
return false
def kmp(hstring, substring):
hlen = len(hstring)
slen = len(substring)
if (hlen == 0) or (slen == 0) or (hlen < slen):
return none
def get_move_list(string): # 根據最長字首與最長字尾判斷移動的位置
n = len(string)
temp_move_list = [0] # 只有乙個字元填充為0
j = 0
for i in range(1, n):
while j > 0 and string[i] != string[j]:
j = temp_move_list[j]
if string[i] == string[j]:
j += 1
return temp_move_list
move_list = get_move_list(substring)
j = 0
for i in range(hlen):
while hstring[i] != substring[j] and j > 0:
j = move_list[j - 1] # 匹配失敗,確定移動後的位置
if hstring[i] == substring[j]:
j += 1
if j == slen:
return i - slen + 1
return false
典型字串匹配演算法實現 單字串匹配演算法
部落格源址 相信大家對快捷鍵ctrl f是做什麼用的都應該很熟悉了,無論是文字編輯 網頁瀏覽等程式上它都意味著字串搜尋,我們提供乙個關鍵字,它將找到當前頁面上的所有該關鍵字所在的位置。關鍵字稱為模式串,在文字t中尋找模式串p出現的所有出現的位置,解決這種問題的演算法叫做字串匹配演算法。字串匹配演算法...
字串匹配演算法 字串匹配演算法總覽
字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...
字串匹配的python實現
所有字串匹配演算法的核心問題是,當出現不匹配時,如何向後移動模式串 一 暴力匹配演算法 如果要匹配乙個字串s 和乙個模式串p,則從i 0開始依次匹配s i i len p 簡單粗暴,如下 def matcher t,p param t the string to check param p patt...