这种算法是D.E.Knuth 与V.R.Pratt和J.H.Morris同时发现的,因此人们称为KMP算法。此算法可以在O(n+m)的时间数量级上完成串的模式匹配操作。
其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯i指针,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。 假设主串为“s 1s 2,...s n",模式串为”p 1p 2...p n",当主串中第i个字符与模式串中第j个字符“失配”(比较不等)时,主串第i字符(i指针不回溯)应与模式中哪个字符再比较? 令当s[i]!=p[j]时,s[i]应与p[next[j]]进行比较。 ![]() 例如: P="abaabcac" ![]()
附: KMP算法查找串S中含串P的个数count #i nclude <iostream> #i nclude <stdlib.h> #i nclude <vector> using namespace std; inline void NEXT(const string& T,vector<int>& next) |
模式匹配算法的改进——KMP算法
最新推荐文章于 2020-10-17 10:22:18 发布
模式匹配算法的改进——KMP算法