题目:
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
思路:
BF或者KMP算法。BF无法通过时间复杂度要求。
代码:
class Solution {
public:
int* kmp;
char *strStr(char *haystack, char *needle) {
if(haystack==NULL || needle == NULL)
{
return NULL;
}
else if(haystack==needle)
{
return haystack;
}
else
{
calKMP(needle);
int len1=getLen(haystack);
int len2=getLen(needle);
int i=0;
int j=0;
while(j<len2&&i<len1)
{
if(*(haystack+i)==*(needle+j))
{
i++;
j++;
}
else
{
if(j==0)
{
i++;
}
else
{
j=kmp[j-1]+1;
}
}
}
if(j==len2)
{
return haystack+i-len2;
}
else
{
return NULL;
}
}
}
void calKMP(char *needle) {
int len = getLen(needle);
kmp= new int[len];
kmp[0]=-1;
for(int i=1;i<len;i++)
{
int cur=i-1;
kmp[i]=-1;
while(cur!=-1)
{
if(*(needle+kmp[cur]+1)==*(needle+i))
{
kmp[i]=kmp[cur]+1;
break;
}
else
{
cur=kmp[cur];
}
}
}
}
int getLen(char *needle) {
if(needle==NULL)
{
return 0;
}
else
{
int len=0;
while(*needle!='\0')
{
len++;
needle++;
};
return len;
}
}
};