演算法 KMP 字串匹配演算法

2021-10-22 02:25:57 字數 2163 閱讀 6256

[by_041]

nex.

clear()

; nex.

resize

(str_1.

size()

);for(

int i=

0,j=nex[0]

=-1;i<

(int

)str_1.

size()

;nex[

++i]

=++j)

下標01

2345

str_1[ ]bbb

abbnex[ ]-101

201下標

0123

4567

891011

1213

14str_2[ ]bbb

acbb

babb

babb

第1步【b】bb

abb第2步b

【b】bab

b第3步b

b【b】ab

b第4步bbb

【a】b

b第5步bbb

a【b】b(此

處nex

[4]=0

第6步

【b】bba

bb(nex

[0]=-1

第7步

【b】bba

bb第8步

b【b】ba

bb第9步bb

【b】abb

10bb

b【a】bb

11bb

ba【b】b

12bb

bab【b】

(get6)

13

b【b】ba

bb…(

get10)…

#include

using

namespace std;

intmain()

vector<

int>anss;

for(

int now_1=

0,now_2=

0;now_2<

(int

)str_2.

size()

;now_2++)}

for(

auto i:anss)

cout

(nex.

begin()

,nex.

end())

; nex.

pop_back()

;reverse

(nex.

begin()

,nex.

end())

;for

(auto i:nex)

cout<' ';

cout

}

#include

#include

#include

#include

using

namespace std;

#define pattern_max_size 1001

struct pattern //模式串類

void

out(

)//輸出內容

intsize()

//更新siz

void

kmp_biuld_nex()

//搭建nex功能陣列

}void

kmp_match

(char

*astr)

//模式串識別,將astr中每一次出現ptn(當前模式串)的首位置儲存在成員變數anss裡}}

};intmain

(void

)

字串匹配演算法 KMP演算法

kmp演算法是一種改進的字串匹配演算法。kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next 函式,函式本身包含了模式串的區域性匹配資訊。下面從乙個例子來了解kmp演算法 字串 bbc abcdab abcdabcdabde 我想...

字串匹配演算法KMP演算法

資料結構中講到關於字串匹配演算法時,提到樸素匹配演算法,和kmp匹配演算法。樸素匹配演算法就是簡單的乙個乙個匹配字元,如果遇到不匹配字元那麼就在源字串中迭代下乙個位置乙個乙個的匹配,這樣計算起來會有很多多餘的不符合的匹配做了冗餘的比較。假設源字串長n,字串長m 該演算法最差時間複雜度為 m n m ...

字串匹配演算法(KMP演算法)

力扣 實現 strstr 函式。給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。int strstr char haystack,char needle else if j n len...