-
数据结构实验之串三:KMP应用
- 一定要记牢固next数组求得是子串的前后缀重复
-
#include<bits/stdc++.h> using namespace std; #define maxn 10001005 int nxt[maxn],n,m,cnt=0,x; int str[maxn],son[maxn]; void getnext() { int i=0,j=-1; nxt[0]=-1; while(i<m) { if(j==-1||son[i]==son[j]) { i++; j++; nxt[i]=j; } else j=nxt[j]; } } void kmp() { int i=0,j=0; while(i<n) { if(j==-1||str[i]==son[j]) { i++; j++; } else j=nxt[j]; if(j==m) { cnt++; if(cnt==1) { x=i; } j=nxt[j]; } } } int main() { while(cin>>n) { cnt=0; for(int i=0; i<n; i++) cin>>str[i]; cin>>m; for(int j=0; j<m; j++) cin>>son[j]; getnext(); kmp(); if(cnt==1) cout<<x-m+1<<" "<<x<<endl; else cout<<-1<<endl; } return 0; }
KMP应用—唯一一次
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/82526082
今日推荐
周排行