Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n,m;
  6. int LPS[50];
  7.  
  8. void ComputePrefixFn(char* p)
  9. {
  10. m = strlen(p);
  11. LPS[0]=0;
  12. int k=0;
  13.  
  14. for(int q=1;q<m;q++)
  15. {
  16. while(k>0 && p[k]!=p[q])
  17. k=LPS[k-1];
  18. if(p[k]==p[q])
  19. k++;
  20. LPS[q]=k;
  21. }
  22. }
  23.  
  24.  
  25. void KMP_Matcher(char* t,char* p)
  26. {
  27. n =strlen(t);
  28. ComputePrefixFn(p);
  29. int q=0;
  30. for(int i=0;i<n;i++)
  31. {
  32. while(q>0 && p[q]!=t[i])
  33. q=LPS[q-1];
  34. if(p[q]==t[i])
  35. q++;
  36. if(q==m)
  37. {
  38. cout<<"Pattern occurs with shift "<<i-m+1<<endl;
  39. q=LPS[q-1];
  40. }
  41. }
  42. }
  43.  
  44.  
  45. int main()
  46. {
  47. char t[10];
  48. char p[10];
  49. cout<<"INPUT STRING:";
  50. cin>>t;
  51. cout<<"INPUT pattern:";
  52. cin>>p;
  53. KMP_Matcher(t,p);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement