Implement strStr()
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
这道题按部就班的做就是从前到后遍历了,但是我建议各位用kmp来做,可以掌握多点知识。
class Solution {
public:
char *strStr(char *haystack, char *needle) {
int len1 = strlen(haystack), len2 = strlen(needle);
int *next = new int[len1];
int i = 0, j = 0, index = 0;
if(haystack == needle || (haystack != NULL && strlen(needle) == 0))
return haystack;
if(len1 < len2)
return NULL;
getnext(needle, next);
while(i < len1 && j < len2){
if(haystack[i] == needle[j]){
i++;
j++;
}else{
index += j - next[j];
if(next[j] == -1){
j = 0;
i++;
}else
j = next[j];
}
}
if(needle[j] == '\0')
return haystack+index;
else
return NULL;
}
private:
void getnext(char *T, int *next){
int k = 0, j = -1;
next[0] = -1;
while(k < strlen(T) - 1){
if(j == -1 || T[j] == T[k]){
j++;
k++;
if(T[j] == T[k])
next[k] = next[j];
else
next[k] = j;
}else
j = next[j];
}
}
};