關於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 算出一張 部分匹配表 接下來就很簡單了,將字串和搜尋詞都從...