KMP算法
2021/8/6 1:36:03
本文主要是介绍KMP算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
找了很多视频,在站找到了一个还不错的视频。
b站KMP视频
还有全套分类
https://www.bilibili.com/read/cv8013121
就是代码少。不过自己写也差不多啦。
- 第一节KMP我的课后作业
#include<stdio.h> int next[]={-1,0,0,0,0,1,2,3}; int KMP(char* s,char *t) { int i=0,j=0; while(s[i]&&t[j]) { if(s[i]==t[j]) { i++; j++; }else{ j=next[j]; if(j==-1) { i++; j++; } } } if(!t[j]) { return i-j; }else{ return -1; } } int main() { char *s="DABCDABD"; char t[100]; gets(t); int p=KMP(s,t); if(p!=-1) { printf("%d\n",p); }else{ printf("查询不到字串\n"); } return 0; }
- 第二节课后作业
#include<stdio.h> #include<string.h> int next[8]={-1,0}; void getNext(int next[],char s[]) { int i=0,j=-1; int len=strlen(s); while(i<len) { if(j==-1||s[i]==s[j]) { i++; j++; next[i]=j; }else{ j=next[j]; } } } int KMP(char s[],char t[]) { int i=0,j=0; while(s[i]&&t[j]) { if(s[i]==t[j]) { i++; j++; }else{ j=next[j]; if(j==-1) { i++; j++; } } } if(!t[j]) { return i-j; }else{ return -1; } } int main() { char s[]="DABCDABD"; char t[100]; gets(t); getNext(next,t); int p=KMP(s,t); for(int i=0;i<strlen(t);i++) printf("%d ",next[i]); printf("\n"); if(p!=-1) { printf("%d\n",p); }else{ printf("查询不到字串\n"); } return 0; }
这篇关于KMP算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南