File tree 1 file changed +50
-0
lines changed
1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ void KMPStringSearch(char* pat, char* str) {
2
+ int M = strlen(pat);
3
+ int N = strlen(str);
4
+
5
+ int lps[M];
6
+ computeLPSArray(pat, M, lps);
7
+
8
+ int i = 0;
9
+ int j = 0;
10
+ while (i < N) {
11
+ if (pat[j] == str[i]) {
12
+ j++;
13
+ i++;
14
+ }
15
+
16
+ if (j == M) {
17
+ printf("Found pattern at index %d ", i - j);
18
+ j = lps[j - 1];
19
+ }
20
+ else if (i < N && pat[j] != str[i]) {
21
+ if (j != 0)
22
+ j = lps[j - 1];
23
+ else
24
+ i = i + 1;
25
+ }
26
+ }
27
+ }
28
+
29
+ void computeLPSArray(char* pat, int M, int* lps) {
30
+ int len = 0;
31
+
32
+ lps[0] = 0;
33
+ int i = 1;
34
+ while (i < M) {
35
+ if (pat[i] == pat[len]) {
36
+ len++;
37
+ lps[i] = len;
38
+ i++;
39
+ }
40
+ else{
41
+ if (len != 0) {
42
+ len = lps[len - 1];
43
+ }
44
+ else {
45
+ lps[i] = 0;
46
+ i++;
47
+ }
48
+ }
49
+ }
50
+ }
You can’t perform that action at this time.
0 commit comments