Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int Prefix(char *s)
  6. {
  7.     int i, t = 0;
  8.     int l=strlen(s);
  9.     int *p =(int*)calloc(l, sizeof(int));
  10.         p[0] = t;
  11.         for (i = 1; i < l; i++){
  12.             while (t > 0 && s[t] != s[i])
  13.                         t = p[t - 1];
  14.                 if (s[t] == s[i])
  15.             t++;
  16.                 p[i]=t;
  17.         }
  18.     return p;
  19.     free(p);
  20. }
  21.  
  22. int KMP(char *s, char *t)
  23. {
  24.         int ls=strlen(s);
  25.     int lt=strlen(t);
  26.     int q=0, k=0;
  27.         int *p =(int*)calloc(ls, sizeof(int));
  28.         p=Prefix(s);
  29.            
  30.         while(k < lt){
  31.                 while (q > 0 && s[q] != t[k])
  32.                         q = p[q - 1];
  33.                 if (s[q] == t[k])
  34.                         q++;
  35.                 if (q == ls){
  36.                     k = k-ls+1;
  37.                         printf("%d ", k);
  38.                     k+=ls;
  39.                 }    
  40.         else k++;
  41.     }
  42.     free(p);
  43. }
  44.  
  45. int main (int argc, char **argv)
  46. {
  47.         KMP(argv[1], argv[2]);
  48.             return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement