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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int len1=strlen(haystack);
int len2=strlen(needle);
if(len1<len2) return NULL;
if(len2==0) return haystack;
vector<int> fail;
fail.resize(len2+1,0);
int i,j,k;
j=0;k=-1;fail[0]=-1;
while(j<len2)
{
if((k==-1)||(needle[j]==needle[k]))
{
j++;
k++;
if(needle[j]==needle[k])
fail[j]=fail[k];
else
fail[j]=k;
}
else
k=fail[k];
}
i=0;
j=0;
while(i<len1&&j<len2)
{
if(j==-1||haystack[i]==needle[j])
{
i++;
j++;
}
else j=fail[j];
}
if(j==len2) return haystack+i-len2;
else return NULL;
}
};
貌似VS2010上return NULL会报错:0x101cd540指令引用的0x00000000内存。该内存不能为read。