-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy pathZ_Algorithm.java
67 lines (50 loc) · 1.04 KB
/
Z_Algorithm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//Z Algorithm for string search.
class Code {
public static void search(String text, String pattern)
{
String concat = pattern + "$" + text;
int l = concat.length();
int Z[] = new int[l];
getZarr(concat, Z);
for(int i = 0; i < l; ++i){
if(Z[i] == pattern.length()){
System.out.println("Pattern found at index "
+ (i - pattern.length() - 1));
}
}
}
private static void getZarr(String str, int[] Z) {
int n = str.length();
int L = 0, R = 0;
for(int i = 1; i < n; ++i) {
if(i > R){
L = R = i;
while(R < n && str.charAt(R - L) == str.charAt(R))
R++;
Z[i] = R - L;
R--;
}
else{
int k = i - L;
if(Z[k] < R - i + 1)
Z[i] = Z[k];
else{
L = i;
while(R < n && str.charAt(R - L) == str.charAt(R))
R++;
Z[i] = R - L;
R--;
}
}
}
}
public static void main(String[] args)
{
String text = "CODERS LOVE CODE";
String pattern = "CODE";
search(text, pattern);
}
}
//OUTPUT->
//Pattern found at index 0
//Pattern found at index 14