From ffcbcef14a7916cb5935a07b421da3195b3b3740 Mon Sep 17 00:00:00 2001 From: ABHISHEK AMRUTE <41743655+ABHISHEK-AMRUTE@users.noreply.github.com> Date: Mon, 28 Oct 2019 14:52:20 +0530 Subject: [PATCH] KMP_added #21 --- KMP_algorithm/KMP_algorithm.cpp | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 KMP_algorithm/KMP_algorithm.cpp diff --git a/KMP_algorithm/KMP_algorithm.cpp b/KMP_algorithm/KMP_algorithm.cpp new file mode 100644 index 0000000..25ae230 --- /dev/null +++ b/KMP_algorithm/KMP_algorithm.cpp @@ -0,0 +1,76 @@ + +#include + +void computeLPS(char* pat, int M, int* lps) +{ + + 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++; + } + } + } +} + +void KMP(char* pat, char* txt) +{ + int M = strlen(pat); + int N = strlen(txt); + + + int lps[M]; + + computeLPS(pat, M, lps); + + int i = 0; + int j = 0; + while (i < N) { + if (pat[j] == txt[i]) { + j++; + i++; + } + if (j == M) { + printf("Found pattern at index %d ", i - j); + j = lps[j - 1]; + } + else if (i < N && pat[j] != txt[i]) { + if (j != 0) + j = lps[j - 1]; + else + i = i + 1; + } + } +} + + + + +int main() +{ + char txt[] = "ABABDABACDABABCABAB"; + char pat[] = "ABABCABAB"; + KMP(pat, txt); + return 0; +} +