AC代码如下,有空优化:
class Solution {
public int strStr(String s, String p) {
if(s==null||p==null)
return -1;
if(s.length()==0&&p.length()==0)
return 0;
if(p.length()==0)
return 0;
int i=0;
int j=0;
int[] prefix=new int[p.length()];
int[] next=new int[p.length()];
getNext(p,prefix,next);
while(i<s.length()&&j<p.length()){
if(j==-1||s.charAt(i)==p.charAt(j)){
i++;
j++;
}else
j=next[j];
}
if(j==p.length())
return i-j;
else
return -1;
}
public void getNext(String p,int[] prefix,int[] next){
int len=p.length();
for(int i=1;i<len;i++){
int k=prefix[i-1];
while(p.charAt(i)!=p.charAt(k)&&k!=0){
k=prefix[k-1];
}
if(p.charAt(i)==p.charAt(k))
prefix[i]=k+1;
else
prefix[i]=0;
}
next[0]=-1;
for(int i=1;i<next.length;i++){
next[i]=prefix[i-1];
}
}
}
详细解释链接:https://blog.youkuaiyun.com/God_Mood/article/details/100109127