eynizadeMurad

KMP

Sep 19th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define fast_read ios::sync_with_stdio(0);cin.tie(0);
  3. #define ll long long
  4. using namespace std;
  5. void kmp(string a,string b) {
  6.     int n = a.length(),m = b.length(),len = 0,i = 1,j = 0;
  7.     int lps[m];
  8.     lps[0] = 0;
  9.     while (i < m) {
  10.         if (b[i] == b[len]) {
  11.             len++;
  12.             lps[i] = len;
  13.             i++;
  14.         }
  15.         else {
  16.             if (len == 0) {
  17.                 lps[i] = 0;
  18.                 i++;
  19.             }
  20.             else len = lps[len - 1];
  21.         }
  22.     }
  23.     i = j;
  24.     while (i < n) {
  25.         if (a[i] == b[j]) {
  26.             i++;
  27.             j++;
  28.         }
  29.         if (j == m) {
  30.             cout<<i-j<<" ";
  31.             j = lps[j - 1];
  32.         }
  33.         if (i < n && a[i] != b[j]) {
  34.             if (j == 0)i++;
  35.             else j = lps[j - 1];
  36.         }
  37.     }
  38. }
  39. int main() {
  40.     fast_read;
  41.     string a,b;
  42.     cin>>a>>b;
  43.     kmp(a,b);
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment