Advertisement
leminhkt

68 (1)

Jul 20th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.57 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef vector<int> vi;
  4. vi z_func(string s, int n){
  5.     vi z(n);
  6.     for(int i = 1, l = 0, r = 0; i < n; ++i){
  7.         if(i <= r)
  8.             z[i] = min(z[i - 1], r - i + 1);
  9.         while(i + z[i] < n && s[z[i]] == s[z[i] + i])
  10.             ++z[i];
  11.         if(i + z[i] - 1 > r)
  12.             l = i, r = i + z[i] - 1;
  13.     }
  14.     return z[0] = n, z;
  15. }
  16. int main(){
  17.     string S, S1;
  18.     int n, m, res = 0;
  19.     cin >> S >> S1;
  20.     n = S.length(), m = S1.length();
  21.     vi z = z_func(S1 + '.' + S, n + m + 1);
  22.     for(int i = m + 1; i <= n + 1; i++)
  23.         res += (z[i] == m);
  24.     return cout << res, 0;
  25. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement