标签:ace 模板 cin const bcd bsp using names 算法
字符串 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; }
标签:ace 模板 cin const bcd bsp using names 算法
原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/9734342.html