28. Implement strStr()
Description:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
算法:KMP算法
参考资料:http://blog.csdn.net/yutianzuijin/article/details/11954939/
代码:
class Solution {
public:
int strStr(string haystack, string needle)
{
int len1=haystack.size(), len2=needle.size();
if(len1 < len2)
{
return -1;
}
if(len1==0 && len2==0)
{
return 0;
}
if(len2==0)
{
return 0;
}
int i, j;
int *next = new int[len2+1]; //next[i]表示needle前i个元素中前缀和后缀的最大公共长度
next[0] = 0;
next[1] = 0;
for(i=1; i<len2; ++i)
{
j = next[i];
while(j>0 && needle[i] != needle[j])
{
j=next[j];
}
if(needle[i] == needle[j])
{
++j;
}
next[i+1] = j;
}
for(i=0, j=0; i<len1; ++i)
{
while(j>0 && haystack[i] != needle[j])
{
j = next[j];
}
if(haystack[i] == needle[j])
{
j += 1;
}
if(j == len2)
{
delete [] next;
return i-j+1;
}
}
// for(i=0, j=0; i<=len1-len2;)
// {
// while(j<len2 && haystack[i+j] == needle[j])
// {
// ++j;
// }
// if(j == len2)
// {
// delete [] next;
// return i;
// }
// else
// {
// i += j-next[j];
// j = 0;
// }
// }
delete [] next;
return -1;
}
};