KMP算法
2017-12-27 09:47
162 查看
字符串快速匹配算法
sdut P2463#include<iostream> #include<cstring> #include<cmath> #include<ctime> #include<cstdlib> #include<cstdio> #include<algorithm> #include<vector> #include<queue> #include<map> using namespace std; int i,n,T,l1,l2,j,k; int next1[11000]; char s1[1100000],s2[11000]; int main() { // freopen("a.txt","r",stdin); cin>>T; getchar(); while(T --) { gets(s1); gets(s2); l1 = strlen(s1); l2 = strlen(s2); next1[0] = -1; j = 0;k = -1; while(j < l2) { if(s2[j]==s2[k]||k==-1)next1[++j] = ++k; else k = next1[k]; } i = 0; j = 0; while(i < l1&&j < l2) { if(s1[i]==s2[j]||j==-1) {i++;j++;} else j = next1[j]; } if(j==l2) printf("%d\n",i-j+1); else printf("::>_<::\n"); } return 0; }