Leetcode28——实现 strStr()
要求:实现int strStr(string haystack, string needle) {}函数,haystack是主串,needle是模式串,返回模式串在主串中出现的位置。
暴力匹配
int strStr(string haystack, string needle) {
int l1=haystack.length();
int l2=needle.length();
if (l2==0)
{
return 0;
}
int i=0,j=0;
while (i < l1&&j<l2)
{
if (haystack[i]==needle[j])
{
i++;j++;
}else{
i=i-j+1;j=0;
}
}
if (j==l2)
{//匹配成功
return i-l2;
}else
return -1;
}
KMP算法实现
关于next数组的求法,可以参考这篇博客,图片很生动
1.求next数组
注意:这里next数组下标是从0开始的哦
void getnext(int* next,int l2,string t){
next[0]=-1;
int i=0,j=-1;
while (i<l2-1)
{
if (j==-1||t[i]==t[j])
{
i++;j++;
next[i]=j;
}else{
j=next[j];
}
}
}
2.进行匹配
i指向主串,j指向模式串
int strStr(string haystack, string needle) {
int l1=haystack.length();
int l2=needle.length();
if (l2==0)
{
return 0;
}
int next[l2];
getnext(next,l2,needle);
int i=0,j=0;
while (i<l1&&j<l2)
{
if (j==-1||haystack[i]==needle[j])
{//匹配成功
i++;j++;
}else{
j=next[j];
}
}
if (j==l2)
{//匹配成功
return i-l2;
}else
return -1;
}