中午吃饭前发了一次,但吃饭时想到getNext方法有问题。就删了之前的再写一次。
字符串匹配搜索方法
直接代码:
public class TestKMP {
public static void main(String[] args) {
System.out.println(findStrIndex("absdfsfsadsfdkjlhjshjiuoipweo", "lhjs", 0));
}
public static int findStrIndex(String str1,String str2,int position){
int i=position;
int j=0;
int next[]=getNext(str2);
while(i<str1.length()){
if(str1.charAt(i)==str2.charAt(j)){
if(j==str2.length()-1){
return i-str2.length()+1;
}
i++;
j++;
}else{
if(next[j]==-1){
i=i-next[j];
j=0;
}else{
j=next[j];
}
}
}
return -1;
}
public static int[] getNext(String arg) {
int next[]=new int[arg.length()];
int i=0;
int j=-1;
next[0]=-1;
while(i<next.length-1){
i++;
j++;
if(arg.charAt(i)==arg.charAt(j)){
next[i]=next[j];
}else{
next[i]=j;
if(arg.charAt(i)==arg.charAt(0))
j=0;
else
j=-1;
}
}
return next;
}
}