BF算法
KMP算法
class StringMatcher {
public static int bf(String s, String t) {
int i = 0, j = 0;
while (i < s.length() && j < t.length())
if (s.charAt(i) == t.charAt(j)) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
return j < t.length() ? -1 : i - t.length();
}
private static int[] getNextval(String t) {
int[] nextval = new int[t.length()];
int j = 0, k;
k = nextval[0] = -1;
while (j < t.length() - 1)
if (k == -1 || t.charAt(j) == t.charAt(k)) {
j++;
k++;
nextval[j] = t.charAt(j) != t.charAt(k) ? k : nextval[k];
} else k = nextval[k];
return nextval;
}
public static int kmp(String s, String t) {
int[] nextval = getNextval(t);
int i = 0, j = 0;
while (i < s.length() && j < t.length())
if (j == -1 || s.charAt(i) == t.charAt(j)) {
i++;
j++;
} else j = nextval[j];
return j < t.length() ? -1 : i - t.length();
}
}