Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int> array_temporario(string & padrao){
  5.     vector<int> index;
  6.     int j = 0, i;
  7.     for(i = 1; i < padrao.length();)
  8.         if(padrao[i] == padrao[j]){
  9.             index.push_back(j+1);
  10.             j++;
  11.             i++;
  12.         } else {
  13.             index.push_back(0);
  14.             i++;
  15.         }
  16.     return index;
  17. }
  18.  
  19. int KMP(string & texto, string & padrao){
  20.     vector<int> index = array_temporario(padrao);
  21.     int i = 0, j = 0;
  22.     while(i < texto.length() && j < padrao.length()){
  23.         if(texto[i] == padrao[j]){
  24.             i++; j++;
  25.         } else {
  26.             if(j != 0) j = index[j-1];
  27.             else i++;
  28.         }
  29.     }
  30.     return i-padrao.length();
  31. }
  32.  
  33. int main(){
  34.     string texto = "abcxabcdabcdabcy", padrao = "abcdabcy";
  35.     cout << KMP(texto, padrao) << endl;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement