字串匹配演算法之 KMP演算法

2022-05-02 14:09:09 字數 1300 閱讀 8824

關於kmp演算法的描述,推薦一篇部落格:

該部落格詳細的描述了kmp演算法原理。下面的**實現了kmp演算法:

1

//使用暴力窮舉法, kmp演算法完成字串匹配演算法

2 # include "

iostream

"3 #include"

string

"4 #include"

vector"5

using

namespace

std;

6 vector& bfmatch(string & , string & , vector&);

7 vector& kmpstrmatch(string &, string &, vector&);

8void showpos(vector&);

9int

main()

1024 vector& bfmatch(string & modelstr, string & sonstr,vector&pos)

2536

if (k ==sonstr.size())

37pos.push_back(i);38}

39return

pos;40}

41void showpos(vector&pos)

4250 cout <52else

53 cout << "

no such string!

"<55 vector& kmpstrmatch(string & modelstr, string & sonstr, vector&pos)

5667

else

6874

if (i ==sonstr.size())

75 pos.push_back(j -sonstr.size());

76 j = j -i;

77 comstr = sonstr.substr(0, i - 1

);78

for (int q = 1; q < comstr.size(); q++)

7985 j = j + i-len;

86 i = 0

;87 len = 0;88

}89}90

return

pos;

91 }

總之,kmp的核心思想在於:通過部分匹配字串的長度來決定待匹配字串的移動長度,而不是每次只是移動一位。

字串匹配演算法之kmp演算法

kmp演算法是一種效率非常高的字串匹配演算法,是由knuth,morris,pratt共同提出的模式匹配演算法,所以簡稱kmp演算法 在乙個字串中查詢另乙個字串時,會遇到如下圖的情況 我們通常的做法是從第乙個串a的下一位b再逐位比較,但這樣的做法非常低效。仔細思考一下發現,第乙個串已經匹配的部分就是...

字串匹配之KMP演算法

以前零零散散做了些kmp的題目,一直也沒找出時間整理,這一段又開始研究字串了,就順便把kmp整理了一下。廢話不說了,我們直接入題。說到kmp,首先應該知道,它是一種字串查詢演算法,因為是由乙個姓k,乙個姓m和乙個姓p的人聯合發表的,所以就叫kmp演算法了。kmp演算法是一種線性時間的的字串匹配演算法...

演算法 字串匹配之KMP

說人話就是 比如有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,kmp演算法是最常用的之一。首先對於上面的 比如 我們首先要針對搜尋詞 abcdabd 算出一張 部分匹配表 接下來就很簡單了,將字串和搜尋詞都從...