KMP算法自我理解 和 模板
Posted andromeda-galaxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法自我理解 和 模板相关的知识,希望对你有一定的参考价值。
字符串 abcd abc abcd abc
匹配串 cdabcd
匹配串的 next 0 0 0 0 1 2;
开始匹配
abcd abc abcd abc
cd abc d
a,d 匹配失败
next 数组进行移动
abcd abc abcd abcd
c dabcd
再次匹配
模板
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; int nt[1000]; // next 数组首位为 0 int KMP(string ss,string tt) { nt[0]=0; for(int p=1,k=0;p<tt.size();p++) { while(k>0 && tt[k]!=tt[p]) k=tt[k-1]; if(tt[k]==tt[p]) k++; nt[p]=k; } // 构建 next 数组 for(int p=1,k=0;p<ss.size();p++) { while(k>0&& ss[p]!=tt[k]) k=tt[k-1]; if(ss[p]==tt[k]) k++; if(k==tt.size()) { cout<<"数组下标开始"<<p-tt.size()+1<<" "<<p<<endl; return 1; } } return 0; } int main() { string ss,tt; cin>>ss>>tt; cout<<KMP(ss,tt)<<endl; }
以上是关于KMP算法自我理解 和 模板的主要内容,如果未能解决你的问题,请参考以下文章