ps:此方法与indexOf功能一样
int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。
串的模式匹配
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
"acbc",4,"bc",2
返回:2
public class Main {
public static void main(String[] args) {
Main test = new Main();
System.out.println(test.findAppearance("acbc",4,"bc",2));
}
public int findAppearance(String A, int lena, String B, int lenb) {
if(A==null||B==null){
return -1;
}
int[] next=new int[lenb];
int result=-1;
next[0]=-1;
int index;
for(int i=1;i<lenb;i++){
index=i-1;
while(i!=1&&B+(i-1)!=B+next[index]){
index=next[index];
if(index==0){
break;
}
}
next[i]=next[index]+1;
}
int k=0;
for(int i=0;i<lena;i++){
if(A.charAt(i)==B.charAt(k)){
k++;
if(k==lenb){
return i-lenb+1;
}
}
else{
if(k!=0)
k=next[k];
}
}
return result;
}
}