首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kmp字符串查找算法

好几次都遇到字符串查找的题目,说实话,第一次遇到kmp,确实是搞懂了,但是做得少,老是会忘怎么写,即使知道原理,不会写就是不会吧,今天把它记录下来。

//优化过后的next 数组求法

void GetNextval(char* p, int next[])

{

int pLen = strlen(p);

next[0] = -1;

int k = -1;

int j = 0;

while (j

{

//p[k]表示前缀,p[j]表示后缀

if (k == -1 || p[j] == p[k])

{

++j;

++k;

//较之前next数组求法,改动在下面4行

if (p[j] != p[k])

next[j] = k; //之前只有这一行

else

//因为不能出现p[j] = p[ next[j ]],所以当出现时需要继续递归,k = next[k] = next[next[k]]

next[j] = next[k];

}

else

{

k = next[k];

}

}

}

int main()

{

int i,j;

while(~scanf("%s",str)&&str[0]!='#')

{

scanf("%s",s);

lens = strlen(s);

kmp();

int sum = 0;

j = 0;

i = 0;

while(str[i])

{

if(j==-1||str[i]==s[j])

{

++i;

++j;

}

else

{

j = _next[j];

}

if(j==lens)

{

// 匹配成功位置开始为j-i;

++sum;

j=0;

}

}

printf("%d\n",sum);

}

return 0;

}

不求上进的咸鱼

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180323G02D4A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券