[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...