Implement strStr()Feb
18 '12
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
KMP算法,O(m+n)的时间复杂度。
class Solution {
public:
char *strStr(char *haystack, char *needle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = strlen(needle);
int hlen = strlen(haystack);
if(len == 0) return haystack;
if(hlen == 0) return NULL;
int *next = new int[len];
next[0] = -1;
for(int i = 1;i<len;i++) next[i] = 0;
if(len>2){
int index = -1;
for(int k = 2; k < len;k++)
{
index = next[k-1];
while(index != -1){
if(needle[k-1] == needle[index]) {
next[k] = index+1;
break;
}
else index = next[index];
}
}
}
int i,j;
for(i = 0,j = 0;i < hlen && j < len;)
{
if(*(needle+j) == *(haystack+i)) {
i++;
j++;
}else{
if(next[j]==-1) i++;
else j = next[j];
}
}
if(j== len) return haystack+i-len;
return NULL;
}
};
24 milli secs
//转一篇讲解KMP算法,尤其是next数组求法的文章