int strStr(string haystack, string needle) {
if(!haystack.size()&&!needle.size())
return 0;
else if(!needle.size())
return 0;
int len1=haystack.size();
int len2=needle.size();
int next[len2];
//
next[0]=-1;
if(1<len2)
next[1]=0;
int i=2;
int j=0;
int len=needle.size();
while(i<len)
{
if(j==-1)
{
next[i]=0;
j=0;
i++;
}
else if(needle[i-1]==needle[j])
{
next[i]=j+1;
i++;
j++;
}
else
{
j=next[j];
}
}
//
i=0;
j=0;
while(i<len1)
{
if(j==-1||haystack[i]==needle[j])
{
i++;
j++;
}
else
{
j=next[j];
}
if(j==len2)
return i-j;
}
return -1;
}
};
if(!haystack.size()&&!needle.size())
return 0;
else if(!needle.size())
return 0;
int len1=haystack.size();
int len2=needle.size();
int next[len2];
//
next[0]=-1;
if(1<len2)
next[1]=0;
int i=2;
int j=0;
int len=needle.size();
while(i<len)
{
if(j==-1)
{
next[i]=0;
j=0;
i++;
}
else if(needle[i-1]==needle[j])
{
next[i]=j+1;
i++;
j++;
}
else
{
j=next[j];
}
}
//
i=0;
j=0;
while(i<len1)
{
if(j==-1||haystack[i]==needle[j])
{
i++;
j++;
}
else
{
j=next[j];
}
if(j==len2)
return i-j;
}
return -1;
}
};