package L5;
public class L3 {
static int[] next(String p) {
int plen = p.length();
char[] pc = p.toCharArray();
int[] next = new int[plen];
next[0] = -1;
if (plen == 1)
return next;
next[1] = 0;
int j = 1, k = next[j];
while (j < plen - 1) {
if (k < 0 || pc[j] == pc[k]) {
next[++j] = ++k;
} else {
k = next[k];
}
}
return next;
}
static int indexof(String s, String p) {
int slen = s.length(), plen = p.length();
int i = 0, j = 0;
int[] next = next(p);
while (i + plen < slen) {
if (j == -1 || s.charAt(i) == p.charAt(j)) {
i++;
j++;
} else {
j = next[j];
}
if (j == plen)
return i - j;
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "abcdefabcde";
String p = "def";
int index = indexof(s, p);
System.out.println(index);
}
}