Advertisement
MeShootIn

Knuth-Morris-Pratt algorithm

Oct 22nd, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.62 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. vector <int> prefixFunction(string text)
  6. {
  7.     int k, i, len = text.length();
  8.     vector <int> p(len);
  9.     for(i = 1; i < len; i++)
  10.     {
  11.         while(k > 0 && text[i] != text[k]) k = p[k - 1];
  12.         if(text[i] == text[k]) k++;
  13.         p[i] = k;
  14.     }
  15.     return p;
  16. }
  17. int main()
  18. {
  19.     string text, pattern;
  20.     cin >> text >> pattern;
  21.     text = pattern + '$' + text;
  22.     vector <int> p = prefixFunction(text);
  23.     int len = pattern.length(), i;
  24.     for(i = 0; i < p.size(); i++) if(p[i] == len) printf("%d ", i - 2 * len);
  25.     return 0;
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement