思路:
利用kmp算法
/**
* Created by marsares on 15/6/29.
*/
public class ImplementstrStr {
public int strStr(String haystack, String needle) {
int[]next=getNext(needle);
int i=0;
while(i<haystack.length()-needle.length()+1){
boolean isfind=true;
for(int j=0;j<needle.length();j++){
if(haystack.charAt(i+j)!=needle.charAt(j)){
if(j==0)i++;
else i=i+j-next[j];
isfind=false;
break;
}
}
if(isfind)return i;
}
return -1;
}
public int[] getNext(String b){
if(b==null)return null;
if(b.length()==0)return null;
int[]next=new int[b.length()+1];
next[0]=0;
next[1]=0;
for(int i=1;i<b.length();i++){
if(b.charAt(i)==b.charAt(next[i]))next[i+1]=next[i]+1;
else{
int index=i;
while(index!=0){
if(b.charAt(next[next[index]])==b.charAt(i)){
next[i]=next[index]+1;
break;
}
index=next[index];
}
if(index==0&&b.charAt(0)==b.charAt(i))next[i+1]=1;
else if(index==0&&b.charAt(0)!=b.charAt(i))next[i+1]=0;
}
}
return next;
}
public static void main(String[]args){
ImplementstrStr istr=new ImplementstrStr();
System.out.println(istr.strStr("abcdefg","cde"));
}
}