HDU1711-Number Sequence
字符串匹配模板题。KMP的话,我觉得算导上的讲解与证明很清晰,代码也很工整简洁,很好理解。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int N = 1e6+5; const int M = 1e4+5; int txt[N],pat[M],pf[M]; int n,m; void CPF() { pf[1] = 0; int k = 0; for (int i=2;i<=m;i++) { while (k && pat[k+1]!=pat[i]) k = pf[k]; if (pat[k+1] == pat[i]) k++; pf[i] = k; } } int KMP() { CPF(); int k = 0; for (int i=1;i<=n;i++) { while (k && pat[k+1]!=txt[i]) k = pf[k]; if (pat[k+1] == txt[i]) k++; if (k==m) return i-m+1; } return -1; } int main() { int T; scanf("%d",&T); while (T--) { scanf("%d %d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&txt[i]); for (int i=1;i<=m;i++) scanf("%d",&pat[i]); printf("%d\n",KMP()); } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步