前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kmp优化模板----------------------C语言——菜鸟级

kmp优化模板----------------------C语言——菜鸟级

作者头像
Fivecc
发布2022-11-21 14:53:10
4500
发布2022-11-21 14:53:10
举报
文章被收录于专栏:前端ACE
代码语言:javascript
复制
#include <stdio.h>
#include<string.h>
int next[100];
void getnext(char a[100],int n)//next值的获取 
{
  int i=0,j=-1;//初始 
  next[0]=-1;
  while(i<n)
  {
  	   if(j==-1||a[i]==a[j])
		 { 
		   j++,i++,next[i]=j;
		   if(a[i]==a[j])next[i]=next[j];//优化部分 优化   优化前缀与后缀 相同 例如 abcabcabc
		 }
  	   else j=next[j];//不匹配回溯到上一个匹配点 
  }	
}
int kmp(char a[100],char b[100],int lea,int leb)//kmp 函数 
{
	getnexth(a,lea);//next值的获取 
	int i=0,j=0,w=0;
	while(i<leb)
	{  if(j==-1||a[j]==b[i])i++,j++;
	   else j=next[j];
	   if(j==lea)break;
	//	if(j==lea)w++,j=next[j];
	}
	if(j==lea)w=i-j+1;
	return w;
	
}
int main()
{  int lea,leb;	char a[100],b[100];
	while(scanf("%s%s",&b,&a)!=EOF)//b 被匹配串 a模板串 
	{
	//scanf("%s",&b);
	//scanf("%s",&a);
	lea=strlen(a);
	leb=strlen(b);
  printf("%d\n",kmp(a,b,lea,leb));
  memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));
  memset(next,0,sizeof(next));
	}
return 0;
} 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档