news 2026/7/6 10:18:24

kmp算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kmp算法

kmp算法运用于字符串匹配,具体实现过程如下:

拿从母串中找是否存在某个字串举例

1.求字串的next数组,什么是next数组,即每个字母所在位置对应的最长相等前后缀,例如abcabf的next数组就是000120,那如何找一个next数组呢

void getnext(int next[], char* s) { int len_ = strlen(s);//求出字符串长度 int j = 0; next[0] = 0; for (int i = 1; i < len_; i++) { while (j > 0 && s[j] != s[i]) { j = next[j - 1];//回退 } if (s[j] == s[i]) { j++; } next[i] = j; } }

首先,我们将next首元素赋值为0,j是前缀指针,i是后缀指针,i一直向后移动,只有当i和j指向元素是相同的时候,j才向后移动。一旦不相等,j就一直回退,一种可能是到相等位置,一种可能一直找不到相等的,回到首元素位置。要注意的是,j不仅是前缀指针,它同时也是每个元素对应的next

2.将子串和母串进行比对

i指向母串,一直向后移动,j指向子串,从遇到相等的开始,j也开始移动。一旦不相等,j就开始回退,也是两种情况一种可能是到相等位置,一种可能一直找不到相等的,回到首元素位置。一旦j移动到元素末尾,即表示存在

bool judge(char* a, char* b,int next[]) { int j = 0;//这是字串 int i = 0;//这是母串 int len1 = strlen(a); int len2 = strlen(b); for (i = 0; i < len2; i++) { while (j > 0 && a[j] != b[i]) { j = next[j - 1];//回退 } if (a[j] == b[i]) { j++; } if (j == len1) { return true; } } if (j != len1) { return false; } return 0; }

这是全部实现过程,如有错误,请指出

void getnext(int next[], char* s) { int len_ = strlen(s);//求出字符串长度 int j = 0; next[0] = 0; for (int i = 1; i < len_; i++) { while (j > 0 && s[j] != s[i]) { j = next[j - 1];//回退 } if (s[j] == s[i]) { j++; } next[i] = j; } } bool judge(char* a, char* b,int next[]) { int j = 0;//这是字串 int i = 0;//这是母串 int len1 = strlen(a); int len2 = strlen(b); for (i = 0; i < len2; i++) { while (j > 0 && a[j] != b[i]) { j = next[j - 1];//回退 } if (a[j] == b[i]) { j++; } if (j == len1) { return true; } } if (j != len1) { return false; } return 0; } int main() { char str1[100];//子串 char str2[200];//母串 int next[101]; scanf("%s%s", str1, str2); getnext(next, str1); bool res = judge(str1, str2,next); printf("%s", res ? "true" : "false"); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 10:39:40

腾讯混元4B开源:轻量级大模型如何重塑AI部署格局

腾讯混元4B开源&#xff1a;轻量级大模型如何重塑AI部署格局 【免费下载链接】Hunyuan-4B-Pretrain 腾讯开源混元大语言模型Hunyuan-4B预训练版本&#xff0c;具备高效部署与强大性能。支持256K超长上下文理解&#xff0c;融合快慢思维双推理模式&#xff0c;在数学、编程、科学…

作者头像 李华
网站建设 2026/7/6 7:08:27

Hocuspocus 完整指南:构建实时协作应用的终极解决方案

Hocuspocus 完整指南&#xff1a;构建实时协作应用的终极解决方案 【免费下载链接】hocuspocus The Y.js WebSocket backend 项目地址: https://gitcode.com/gh_mirrors/ho/hocuspocus Hocuspocus 是一个基于 Y.js 的即插即用协作后端&#xff0c;专门为开发者提供简单高…

作者头像 李华
网站建设 2026/7/2 5:49:15

VideoSrt:3分钟快速制作专业视频字幕的终极指南

VideoSrt&#xff1a;3分钟快速制作专业视频字幕的终极指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 还在为视频字幕制作而烦恼…

作者头像 李华
网站建设 2026/7/5 2:45:34

Lottie动画优化实战:从性能诊断到智能压缩的全链路解决方案

Lottie动画优化实战&#xff1a;从性能诊断到智能压缩的全链路解决方案 【免费下载链接】lottie-web 项目地址: https://gitcode.com/gh_mirrors/lot/lottie-web 问题诊断&#xff1a;为什么你的Lottie动画加载缓慢&#xff1f; "这个动画明明很简单&#xff0c;…

作者头像 李华