Advertisement
Josif_tepe

Untitled

Dec 24th, 2023
749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. const int maxn = 1e5 + 10;
  5. int lps[maxn];
  6. void preprocess_lps(string pattern) {
  7.     int j = 0, i = 1;
  8.     lps[0] = 0;
  9.    
  10.     while(i < (int) pattern.size()) {
  11.         if(pattern[i] == pattern[j]) {
  12.             lps[i] = j + 1;
  13.             j++;
  14.             i++;
  15.         }
  16.         else {
  17.             if(j != 0) {
  18.                 j = lps[j - 1];
  19.             }
  20.             else {
  21.                 lps[i] = 0;
  22.                 i++;
  23.             }
  24.         }
  25.     }
  26. }
  27. void kmp(string text, string pattern) {
  28.     int n = (int) text.size();
  29.     int m = (int) pattern.size();
  30.     preprocess_lps(pattern);
  31.     int cnt = 0;
  32.     vector<int> idx;
  33.     int i = 0, j = 0;
  34.     while(n - i >= m - j) {
  35.         if(text[i] == pattern[j]) {
  36.             i++;
  37.             j++;
  38.         }
  39.         if(j == m) {
  40.             cnt++;
  41.             idx.push_back(i - j);
  42.             j = lps[j - 1];
  43.         }
  44.         else if(i < n and text[i] != pattern[j]) {
  45.             if(j != 0) {
  46.                 j = lps[j - 1];
  47.             }
  48.             else {
  49.                 i++;
  50.             }
  51.         }
  52.     }
  53.     if(cnt == 0) {
  54.         cout << "Not Found" << endl;
  55.         return;
  56.     }
  57.     cout << cnt << endl;
  58.     for(int x : idx) {
  59.         cout << x + 1 << " ";
  60.     }
  61.     cout << endl;
  62. }
  63.  
  64. int main() {
  65.     ios_base::sync_with_stdio(false);
  66.     int t;
  67.     cin >> t;
  68.     while(t--) {
  69.         string text, pattern;
  70.         cin >> text >> pattern;
  71.         kmp(text, pattern);
  72.        
  73.     }
  74.  
  75.    return 0;
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement