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

2021-06-18 09:28:36 字數 988 閱讀 1276

1.樸素的模式匹配演算法。

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

比如主串為「googldgfegogegoogleglgoogegooglegoo」,子串為「google」。首先從主串頭字元『g』開始與子串匹配,接下來的1,2,3,4都與子串匹配,但第5位不匹配,於是又以主串的下乙個字元『o』開始,與子串匹配。一直這樣迴圈下去。下面第乙個程式是找到主串與子串有無子串匹配,若有,返回匹配時,子串第乙個字元位於主串中的位置,若無匹配,返回-1。

1)找到主串與子串有無子串匹配,若有,返回匹配時,子串第乙個字元位於主串中的位置,若無匹配,返回-1。

public class patternmatch

/** returns 子串在主串中第一次出現的位置

* @param source 主串

* @psrsm substr 子串

*/static int patternmatch(string source,string substr)

/** returns 匹配成功次數

* @param source 主串

* @psrsm substr 子串

*/static int patternnumber(string source,string substr)

{ int number=0;

int len1,len2;

len1=source.length();

len2=substr.length();

int i,j,k;

i=j=k=0;

while(i2.kmp模式匹配演算法

樸素模式匹配演算法的最大問題就是太低效了。於是三位前輩發表了一種kmp演算法,其中三個字母分別是這三個人名的首字母大寫。

樸素的模式匹配演算法

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

字串模式匹配演算法之一 樸素模式匹配演算法

被搜尋的字串稱為主串,待搜尋的字串稱為模式串。樸素模式匹配演算法的基本思想 對主串的每乙個字元作為子串開頭,與模式串進行匹配。對主串做大迴圈,每個字元開頭做模式串長度的小迴圈,直到匹配成功或全部遍歷完成為止。實現非常簡單 int strstr char haystack,char needle 樸素...

字串樸素模式匹配演算法 簡單模式匹配演算法

將主串中與模式串長度相同的子串搞出來,挨個與模式串對比 當子串與模式串某個對應字元不匹配時,就立即放棄當前子串,轉而檢索下乙個子串 若模式串長度為m,主串長度為n,則直到匹配成功 匹配失敗最多需要 n m 1 m次比較 最壞時間複雜度 o nm 最壞情況 每個子串的前m 1個字元都和模式串匹配,只有...