class Solution {
public:
void getPre(char *needle,vector<int> &pre,int neeLen)//对目标串,产生一个部分匹配的数组
{
int k;
pre[0]=-1;
for(int i=1;i<neeLen;i++)
{
k=pre[i-1];
while(k!=-1&&needle[k+1]!=needle[i])
k=pre[k];
if(needle[k+1]==needle[i])
pre[i]=k+1;
else
pre[i]=-1;
}
}
char *strStr(char *haystack, char *needle) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(needle==NULL||haystack==NULL)
return NULL;
int hayLen=strlen(haystack);
int neeLen=strlen(needle);
if(neeLen>hayLen)
return NULL;
if(neeLen==0)
return haystack;
vector<int> pre(neeLen,-1);//对目标串,产生一个部分匹配的数组
getPre(needle,pre,neeLen);
int k=-1;
for(int i=-1;i<hayLen;i++)
{
while(k!=-1&&needle[k+1]!=haystack[i+1])
k=pre[k];
if(needle[k+1]==haystack[i+1])
k++;
if(k==neeLen-1)
return &haystack[i-neeLen+2];
}
return NULL;
}
};
【leetcode】Implement strStr()
最新推荐文章于 2019-07-15 16:09:50 发布