串的模式匹配 暴力法與KMP演算法

2021-09-23 05:56:08 字數 955 閱讀 9993

1.bf演算法(暴力法)

初始化兩個陣列下標,迴圈比較兩個字串的字元是否相等,相等則下標同時進一,比較下個元素直到匹配成功;不相等則使匹配的串下標回退到 0,被匹配的串下標回退到比較的初始位置+1,迴圈往復。

**如下

#include#includeusing namespace std;

int bfmatching(string s1, string s2, int pos)

s_" class="mathcode" src=""/>

那麼字串的字首組成的集合有:

字串字尾組成的集合有:

假設:pst的定義:

乙個例子:babcab,那麼字首集合為,,,,},字尾集合為,,,,},此時兩個集合的交集為,},那麼交集中含有元素的最多的為,此時 pst=2

求取pmt的具體演算法,請移步:

pmt求取的核心思想:

對乙個字串,將它錯開 乙個位置進行比較,這樣上面一行即在求字尾,而下面一行則是在用字首與上面的字尾作比較。即:

kmp演算法**

#include#include#define max_size 1024

using namespace std;

int next[max_size];

void get_next(string s1)

else }}

int kmp(string s1, string s2, int pos)

else

} if(j==len2 && i<=len1)

return i-j+1;

else

return -1;

}int main()

KMP 模式串匹配演算法

這兩天讀了july的kmp,覺得很受益,寫下以作備忘。kmp最重要的就是求出next陣列,而next陣列則是通過不斷比較 str2 k 與 str2 j 來確定下乙個字元對應的 next數值 相等則直接next j k 不相等則令k next k 進行遞推直到出現 str2 k str2 j 相等的...

串 KMP模式匹配演算法

樸素模式匹配演算法就是簡單的二重迴圈,第一重迴圈主串s從1到n,然後第二重迴圈子串t從1到m進行匹配判斷,時間複雜度為o n m 1 m kmp演算法的核心思想是 第一 如果子串前r個字元均不相等,且子串前r個字元與主串某連續的r個字元匹配,但子串第r 1就不匹配了,則主串的匹配下標可以直接向前跳r...

模式串匹配 KMP演算法

kmp是對字首暴力搜尋的改進,基於的想法其實是很樸素的。首先我們來看一下暴力搜尋。char bf char src,char pattern else if pattern temp 0 return src else return null 如果匹配失敗,則將關鍵字向右滑動乙個字元,從頭開始匹配關...