1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 bool matched(string s,int k,int i) 6 { 7 bool result=true; 8 int p=0; 9 int q=i; 10 while(p<k) 11 { 12 if(s[p]==s[q]) 13 { 14 p++;q--; 15 } 16 else 17 { 18 result=false; 19 break; 20 } 21 } 22 return result; 23 } 24 vector<int> find_next(string p) 25 { 26 vector<int> result; 27 result.push_back(0); 28 for(int i=1;i<p.length();i++) 29 { 30 int k=0; 31 for(k=i;k>0;k--) 32 { 33 if(matched(p,k,i)) 34 { 35 result.push_back(k); 36 break; 37 } 38 } 39 if(k==0) 40 result.push_back(0); 41 } 42 return result; 43 } 44 int main() 45 { 46 string s,p; 47 cin>>s>>p; 48 49 vector<int> next_index=find_next(p); 50 int index_s=0,index_p=0; 51 int matched=0; 52 while(index_s<s.length() && index_p<p.length()) 53 { 54 if(s[index_s]==p[index_p]) 55 { 56 index_s++;index_p++;matched++; 57 } 58 else if(matched==0) 59 { 60 index_s++; 61 } 62 else 63 { 64 index_p=matched-next_index[index_p-1]; 65 matched=index_p-1; 66 } 67 } 68 if(index_p==p.length()) 69 { 70 cout<<index_s-index_p<<endl; 71 system("pause"); 72 return 0; 73 } 74 else 75 { 76 cout<<-1<<endl; 77 system("pause"); 78 return 0; 79 } 80 }