Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Update (2014-11-02):
The signature of the function had been updated to return the index instead of the pointer. If you still see your function signature returns a char *
or String
, please click the reload button to reset your code definition.
Have you met this question in a real interview?
Yes
No
class Solution {
void getNext(char *needle, int next[]){ //构造next数组
int j = 0, k = -1;
next[0]=-1;
while(needle[j+1]!='\0'){
if(k==-1 || needle[k]==needle[j]){
++j, ++k;
if(needle[k]!=needle[j])
next[j]=k;
else
next[j]=next[k];
}else
k=next[k];
}
}
public:
int strStr(char *haystack, char *needle) {
int *next = new int [strlen(needle)];
getNext(needle, next);
int i=0,j=0, index=0;
while(haystack[i]!='\0'&&needle[j]!='\0'){
if(haystack[i]==needle[j])
i++,j++;
else{
//index+=j-next[j]; 可用来定位haystack中的位置, 不过用下面的i-strlen(needle) 更好理解
if(next[j]==-1)
i++,j=0;
else
j=next[j]; // 这条语句包含了两种情况, next[j]=0时,j=0 and next[j]>=1时,j=next[j];
}
}
if(needle[j]=='\0')
return i-strlen(needle);
else
return -1;
}
};