串之樸素的模式匹配演算法

2021-10-05 15:00:18 字數 1001 閱讀 2563

一、串的模式匹配的定義

這個問題其實就是乙個字串在乙個大的字串中的定位問題。這種子串的定位問題的操作通常叫做串的模式匹配

二、舉例說明

假如主串是s = 「qbfhilmeach」。模式串 p= 「hilk」。現在我們需要在主串中找到模式串。它的匹配過程如下:

直到匹配成功

簡單得來說,就是對主串的每乙個字元作為子串開頭,與要匹配的字串進行匹配。對主串做大迴圈,每個字元開頭做p的長度的小迴圈,直到匹配成功或全部遍歷完成為止。

三、演算法實現

int

bf(string s,string p)

else}if

(j == p->cur)

//模式串匹配完成

return-1

;}

四、這種演算法的缺點

這種演算法最好的情況下,就是一開始匹配成功**,時間複雜度為o(1)。再稍微差一點**就是上面的例子中,第一二三位匹配成功,第四位匹配失敗,時間複雜度就為o(n+m),其中n為主串的長度,m為要匹配的模式串的長度。最壞的情況就是每次不成功的匹配都發生在模式串的最後乙個字元。比如,主串 s=「0000000000000001」,模式串p=「00000001」在匹配的時候每次都將p中的字元迴圈到最後一位才發現才能匹配成功。但如果模式串p=「0000002」,直到最後把主串迴圈完,才發現不能夠匹配成功。但如果能早早知道匹配不成功那麼也就沒有比較的必要了。因此最壞的情況下的使勁複雜度為o((n-m+1)*m ).

串 樸素匹配演算法

c語言極簡版 include include include 返回子串t在主串s中第pos個字元之後的位置。若不存在,則函式返回值為0。intindex char s,char t,int pos else 指標後退重新開始匹配 if j 1 j超出模式串的長度 return i 2 2為模式串的長...

樸素的模式匹配演算法

有時,我們需要在乙個長串t中尋找固定長度的子串s,找出子串在原串中的位置,對於這種操作,我們稱之為串的模式匹配 思想 從原串t第乙個位置開始,與s中第乙個位置資料進行匹配,相同則兩個位置均後移,否則,子串退回到第乙個位置,原串t退回到第二個位置,當子串匹配完成,則返回在原串中匹配到的首個位置即可。如...

模式匹配演算法 樸素演算法

1.樸素的模式匹配演算法。樸素模式匹配演算法,簡單的說就是迴圈把主串的每個字元作為開頭,與子串去進行匹配。對主串做大迴圈,每個字元為開頭做子串 要匹配的字串 的小迴圈,如果對應字元匹配,則兩字串都向後移位,否則子串又從子串的開頭開始與主串前一步比較的字元開頭的下一位繼續匹配,直到匹配成功或 主串 遍...