leetcode 28. Implement strStr()
题目
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
思路
实现kmp算法
代码实现
class Solution {
public int strStr(String haystack, String needle) {
//检查输入参数
if(haystack==null){
return -1;
}
if(needle == null||needle.length()==0){
return 0;
}
int [] next=getNext(needle);
int i=0;
int j=0;
int slen=haystack.length();
int plen=needle.length();
while(i<slen && j< plen){
if(j==-1|| haystack.charAt(i)==needle.charAt(j)){
++i;
++j;
}else {
j=next[j];
}
}
if(j == plen){
return i-j;
}else {
return -1;
}
}
int [] getNext(String needle){
int len=needle.length();
int[] next=new int[len];
next[0]=-1;
int i=-1;
int j=0;
while(j<len-1){
//p[i]表示前缀,p[j]表示后缀
//next数组存储的后缀中相应位置对应的前缀next[0] 已经有了对应的值.因此从i=0,j=1开始.next[1]=0
if(i==-1||needle.charAt(i) == needle.charAt(j)){
++i;
++j;
next[j]=i;
}else {
i=next[i];
}
}
return next;
}
}