#include <stdio.h>
#include <string.h>
void KMP(char *text, char *pat) {
// build LPS array
int lps[m];
int len = 0;
lps[0] = 0;
int i = 1;
while (i < m) {
if (pat[i] == pat[len]) {
len++;
lps[i] = len;
i++;
} else {
if (len != 0) {
len = lps[len - 1];
} else {
lps[i] = 0;
i++;
}
}
}
// search phase
i = 0; // text index
int j = 0; // pattern index
int found = 0;
while (i < n) {
if (text[i] == pat[j]) {
i++;
j++;
}
if (j == m) {
printf("Pattern found at index %d\n", i
- j
); found = 1;
j = lps[j - 1];
}
else if (i < n && text[i] != pat[j]) {
if (j != 0)
j = lps[j - 1];
else
i++;
}
}
if (!found) {
}
}
int main() {
char text[] = "bcd egfpqr";
char pat[] = "efg";
KMP(text, pat);
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIEtNUChjaGFyICp0ZXh0LCBjaGFyICpwYXQpIHsKICAgIGludCBuID0gc3RybGVuKHRleHQpOwogICAgaW50IG0gPSBzdHJsZW4ocGF0KTsKCiAgICAvLyBidWlsZCBMUFMgYXJyYXkKICAgIGludCBscHNbbV07CgogICAgaW50IGxlbiA9IDA7CiAgICBscHNbMF0gPSAwOwoKICAgIGludCBpID0gMTsKICAgIHdoaWxlIChpIDwgbSkgewogICAgICAgIGlmIChwYXRbaV0gPT0gcGF0W2xlbl0pIHsKICAgICAgICAgICAgbGVuKys7CiAgICAgICAgICAgIGxwc1tpXSA9IGxlbjsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChsZW4gIT0gMCkgewogICAgICAgICAgICAgICAgbGVuID0gbHBzW2xlbiAtIDFdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbHBzW2ldID0gMDsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBzZWFyY2ggcGhhc2UKICAgIGkgPSAwOyAgICAgIC8vIHRleHQgaW5kZXgKICAgIGludCBqID0gMDsgIC8vIHBhdHRlcm4gaW5kZXgKCiAgICBpbnQgZm91bmQgPSAwOwoKICAgIHdoaWxlIChpIDwgbikgewogICAgICAgIGlmICh0ZXh0W2ldID09IHBhdFtqXSkgewogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CgogICAgICAgIGlmIChqID09IG0pIHsKICAgICAgICAgICAgcHJpbnRmKCJQYXR0ZXJuIGZvdW5kIGF0IGluZGV4ICVkXG4iLCBpIC0gaik7CiAgICAgICAgICAgIGZvdW5kID0gMTsKICAgICAgICAgICAgaiA9IGxwc1tqIC0gMV07CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGkgPCBuICYmIHRleHRbaV0gIT0gcGF0W2pdKSB7CiAgICAgICAgICAgIGlmIChqICE9IDApCiAgICAgICAgICAgICAgICBqID0gbHBzW2ogLSAxXTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgcHJpbnRmKCJObyBtYXRjaCBmb3VuZFxuIik7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgY2hhciB0ZXh0W10gPSAiYmNkIGVnZnBxciI7CiAgICBjaGFyIHBhdFtdICA9ICJlZmciOwoKICAgIEtNUCh0ZXh0LCBwYXQpOwoKICAgIHJldHVybiAwOwp9