Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int Prefix(char *s)
- {
- int i, t = 0;
- int l=strlen(s);
- int *p =(int*)calloc(l, sizeof(int));
- p[0] = t;
- for (i = 1; i < l; i++){
- while (t > 0 && s[t] != s[i])
- t = p[t - 1];
- if (s[t] == s[i])
- t++;
- p[i]=t;
- }
- return p;
- free(p);
- }
- int KMP(char *s, char *t)
- {
- int ls=strlen(s);
- int lt=strlen(t);
- int q=0, k=0;
- int *p =(int*)calloc(ls, sizeof(int));
- p=Prefix(s);
- while(k < lt){
- while (q > 0 && s[q] != t[k])
- q = p[q - 1];
- if (s[q] == t[k])
- q++;
- if (q == ls){
- k = k-ls+1;
- printf("%d ", k);
- k+=ls;
- }
- else k++;
- }
- free(p);
- }
- int main (int argc, char **argv)
- {
- KMP(argv[1], argv[2]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement