KMP模板

来源:互联网 发布:c语言大小写字母互换 编辑:程序博客网 时间:2024/06/10 19:44

kmp一种快速的字符串匹配算法,不是很好理解,感觉B站有个视频做的特别好,跟大家分享下

视频连接:http://www.bilibili.com/video/av3246487/?from=search&seid=13990827196865923065


kmp模板

代码:

#include <iostream>#include <string>#include <cstdio>using namespace std;const int maxn=10000;int fail[maxn];void getFail(string zi){    fail[0]=0,fail[1]=0;    for(int i=1;i<zi.size();i++){        int j=fail[i];        while(j&&zi[i]!=zi[j])             j=fail[j];        fail[i+1]=zi[i]==zi[j]?j+1:0;    }}void kmp(string fu,string zi){    getFail(zi);    int j=0;    for(int i=0;i<fu.size();i++){        while(j&&zi[j]!=fu[i]) j=fail[j];        if(zi[j]==fu[i]) j++;        if(j==zi.size()) printf("找到了下标位置是:%d\n",i-zi.size()+1);    }}int main(){    string fu;    string zi;std::ios::sync_with_stdio(false);//这据话提高cin的速度    while(cin>>fu>>zi)        kmp(fu,zi);}




0 0
原创粉丝点击