KMP算法实现
66 字
1 分钟
KMP算法实现
以LuoguProblem-P3375 【模板】KMP为基准
#include<bits/stdc++.h>using namespace std;#define int long long#define endl '\n'const int N=1e6+10;int nextt[N]={-1};string s1,s2;void tonext(){ int k=-1; for(int i=1;i<s2.size();i++){ while(k>-1&&s2[i]!=s2[k+1]) k=nextt[k]; if(s2[i]==s2[k+1]) k++; nextt[i]=k; }}void kmp(){ tonext(); int k=-1,len1=s1.size(),len2=s2.size(); for(int i=0;i<len1;i++){ while(k>-1&&s1[i]!=s2[k+1]) k=nextt[k]; if(s1[i]==s2[k+1]) k++; if(k==len2-1){ cout<<i-len2+2<<endl; } } return;}signed main(){ cin>>s1>>s2; kmp(); for(int i=0;i<s2.size();i++) cout<<nextt[i]+1<<' ';}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!











