Skip to content

Commit 030bc21

Browse files
authored
complete KMP
1 parent dbfcd24 commit 030bc21

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

KMP

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
}

0 commit comments

Comments
 (0)