标签:string 整数 pac scan names kmp ++ oid center
3 abaaaaaa a bacdeagb ac aaaa bb
1 2 -1
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 typedef char* String; 7 8 int len1,len2; 9 char S[110]; 10 char T[110]; 11 12 void get_next(String T,int *next){ 13 int j = 0; 14 int i = 1; 15 next[1] = 0; 16 while( i<len2 ){ 17 if(0==j || T[i]==T[j]) 18 { 19 i++; 20 j++; 21 next[i] = j; 22 } 23 else{ 24 j = next[j]; 25 } 26 } 27 } 28 29 int Index_KMP(String S,String T,int pos){ 30 int i=pos; 31 int j=1; 32 int next[255]; 33 get_next(T,next); 34 while(i<=len1&&j<=len2){ 35 if(j==0||S[i]==T[j]){ 36 i++; 37 j++; 38 } 39 else{ 40 j=next[j]; 41 } 42 } 43 if(j>len2){ 44 return i-len2; 45 } 46 else 47 return -1; 48 } 49 50 int main(){ 51 int n; 52 cin>>n; 53 while(n--){ 54 scanf("%s%s",S+1,T+1); 55 len1 = strlen(S+1); 56 len2 = strlen(T+1); 57 printf("%d\n",Index_KMP(S,T,1)); 58 } 59 return 0; 60 }
标签:string 整数 pac scan names kmp ++ oid center
原文地址:https://www.cnblogs.com/geziyu/p/10076736.html