Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
class Solution {
public:
void makeNext(char *p, int *next)
{
int k = 0;
int n = strlen(p);
next[0] = 0;
for(int i=1; i<n; i++)
{
while(k > 0 && p[i] != p[k])
k = next[k-1];
if(p[i] == p[k])
++k;
next[i] = k;
}
}
char *strStr(char *haystack, char *needle)
{
int n1 = strlen(haystack);
int n2 = strlen(needle);
if(n1 == 0 && n2 == 0)
return "";
if(n2 == 0)
return haystack;
int *next = new int[n2];
makeNext(needle, next);
int k = 0;
for(int i=0; i<n1; i++)
{
while(k > 0 && haystack[i] != n eedle[k])
k = next[k-1];
if(haystack[i] == needle[k])
++k;
if(k == n2)
return (char*)(haystack + i-n2+1);
}
return NULL;
delete []next;
}
};