Advertisement
istinishat

OwnKMP

May 24th, 2017
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define MAX 1000006
  5.  
  6. int pi[MAX];
  7. string header,text;
  8.  
  9. void pi_fun(string str)
  10. {
  11.     for(int i=1;i<str.size();i++){
  12.         int j=pi[i-1];
  13.         while(j>0 && str[i] != str[j])
  14.             j=pi[j-1];
  15.         if(str[i]==str[j])
  16.             j++;
  17.         pi[i]=j;
  18.     }
  19. }
  20.  
  21. bool match()
  22. {
  23.     int j=0;
  24.     for(int i=0;i<header.size();i++){
  25.         while(j>0 && header[i] != text[j])
  26.             j=pi[j-1];
  27.         if(header[i]==text[j])
  28.             j++;
  29.         if(j==text.size())
  30.             return true;
  31.     }
  32.     return false;
  33. }
  34.  
  35. int main()
  36. {
  37.     freopen("input.txt","r",stdin);
  38.     int i,j;
  39.     cin>>header>>text;
  40.     pi_fun(text);
  41.     cout<<match()<<endl;
  42.  
  43.     return 0;
  44.  
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement