Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
1:注意特殊情况;2:kmp模式匹配;3:needle字符串的后缀数组。
char *strStr(char *hayStack, char *needle)
{
if(*needle == '\0')
{
return hayStack;
}
if(hayStack == NULL || *hayStack == '\0' || needle == NULL)
{
return NULL;
}
int lengthA = (int)strlen(hayStack);
int lengthB = (int)strlen(needle);
int* next = new int[lengthB];
getNext(needle, next);
int i = 0;
int j = 0;
while( i < lengthA && j < lengthB)
{
if(j == -1 || hayStack[i] == needle[j])
{
i++;
j++;
}
else
{
j = next[j];
}
}
char* result = NULL;
if(j == lengthB)
{
result = hayStack + i - j;
}
delete [] next;
return result;
}
void getNext(char* needle, int *next)
{
unsigned long length = strlen(needle);
next[0] = -1;
int i = 0;
int j = -1;
while(i < length-1)
{
if(j == -1 || needle[i] == needle[j])
{
i++;
j++;
if(needle[j] == needle[i])
{
next[i] = next[j];
}
else
{
next[i] = j;
}
}
else
{
j = next[j];
}
}
}