1.C++實現KMP演算法模板
阿新 • • 發佈:2019-01-14
其他經典演算法合集
https://blog.csdn.net/qq_41562704/article/details/86441022
txt為待查詢字串,pat為子字串
#include <iostream> #include <string> #include <vector> using namespace std; string pat,txt; int N,M; std::vector<int> Next; void getNext(){ int i=-1,j=0; Next[0]=-1; while(j<M){ if(i==-1||pat[i]==pat[j]){ i++;j++; Next[j]=i; } else i=Next[i]; } } int KMP(){ int i=0,j=0; while(i<N&&j<M){ if(j==-1||txt[i]==pat[j]){ ++i;++j; } else j=Next[j]; } if(j==M) return i-j; return -1; } int main(){ cin>>txt>>pat; N=txt.length();M=pat.length(); Next.resize(M); getNext(); return KMP(); }