字符串匹配(KMP算法)
private static void GetNext(int[] next, String mapper){
int k = -1, index = 0;
next[0] = -1;
while (index < mapper.length()){
if(k == -1 || mapper.charAt(index) == mapper.charAt(k)){
index++; k++;
if(index == mapper.length()) break;
int temp = k;
while (mapper.charAt(index) == mapper.charAt(temp) && temp != 0)
temp = next[temp];
next[index] = temp;
}
else k = next[k];
}
}
private static int KMPIndex(String major, String mapper){
int[] next = new int[1000];
int i = 0, j = 0;
GetNext(next, mapper);
while (i < major.length() && j < mapper.length()){
if(j == -1 || major.charAt(i) == mapper.charAt(j)){
i++; j++;
}
else j = next[j];
}
if(j >= mapper.length())
return i - mapper.length();
return -1;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String major = in.nextLine();
String mapper = in.nextLine();
int index = KMPIndex(major, mapper);
System.out.println(index);
}