Advertisement
Guest User

KMP

a guest
Jul 22nd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. /**
  2.  Md. Shahidul Islam (shahidul_brur)
  3.  Begum Rokeya University, Rangpur
  4. */
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. const int MAX = 100005;
  8. int pi[MAX];
  9. void prefix(string sub)
  10. {
  11.     int m=sub.length();
  12.     pi[0] = -1;
  13.     for(int i=1, now=0;i<m;i++, now++){
  14.         while(now>=0 && sub[i]!=sub[now])
  15.             now = pi[now];
  16.         pi[i] = now;
  17.     }
  18. }
  19. int kmp(string str, string sub)
  20. {
  21.     int n=str.length();
  22.     int m=sub.length();
  23.     prefix(sub);
  24.     for(int i=0, now=0;i<n;i++){
  25.         while(now>=0 && str[i]!=sub[now])
  26.             now = pi[now];
  27.         now++;
  28.         if(now==m) return 1;
  29.     }
  30.     return 0;
  31. }
  32.  
  33. int main()
  34. {
  35.     string s1, s2;
  36.     while(cin>>s1>>s2)
  37.     {
  38.         if(kmp(s1, s2)==1) cout << "Yes\n";
  39.         else cout << "No\n";
  40.     }
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement