import java.util.Scanner;
/*
* Kmp算法
*/
public class Kmp {
static int[] next=new int[100]; //next数组
public static void get_next(String a) //用来求next数组
{
// 第一位设为-1,方便判断当前位置是否为搜索词的最开始
next[0] = -1;
int i = 0;
int j = -1;
while(i < a.length()) {
if (j == -1 || a.charAt(i) == a.charAt(j)) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
public static int get_index(String a,String b) //用于在主串中搜索子串
{
int a1=0;
get_next(b);
int i=0;
int j=0;
while(i<a.length()&&j<b.length())
{
if(j==0||a.charAt(i)==b.charAt(j)) //用来对比使用
{
if(a.charAt(i)!=b.charAt(j))
{
i++;
continue;
}
i++;
j++;
}
else
{
j=next[j];
}
}
if(j>=b.length())
{
return i-b.length();
}
else
{
return -1;
}
}
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("请输入主字符串");
String a;
a=in.nextLine();
System.out.println("请输入副字符串");
String b;
b=in.nextLine(); //获得主副字符串
int mk=get_index(a,b);
if(mk==-1)
{
System.out.println("主字符串中不包含子串");
}
else
System.out.println("子串在主串中的索引位置为"+mk);
}
}