1 条题解
-
1
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1000005; int n,m,nex[N]; char a[N],b[N]; int main() { cin>>b+1>>a+1; n=strlen(a+1); m=strlen(b+1); nex[1]=0;//在万能头下不能使用next变量 for (int i=2,j=0;i<=n;++i){ while (j>0 && a[i]!=a[j+1]) j=nex[j]; if (a[i]==a[j+1]) j++; nex[i]=j; } for (int i=1,j=0;i<=m;++i){ while (j>0 && (j==n || b[i]!=a[j+1])) j=nex[j]; if (b[i]==a[j+1]) j++; if (j==n) cout<<i-n+1<<"\n"; } for (int i=1;i<=n;++i) cout<<nex[i]<<' '; }
- 1
信息
- ID
- 276
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 52
- 已通过
- 31
- 上传者