news 2026/3/20 5:40:25

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/3/15 17:24:46

保姆级教程:Qwen3 模型 + LLaMA-Factory,零基础也能学会大模型微调

在人工智能技术日新月异的当下&#xff0c;大型语言模型&#xff08;LLM&#xff09;已成为自然语言处理&#xff08;NLP&#xff09;领域的核心驱动力&#xff0c;从日常对话机器人到专业领域的文本分析&#xff0c;其应用场景不断拓展。不过&#xff0c;尽管预训练模型已通过…

作者头像 李华
网站建设 2026/3/15 21:53:06

5个隐藏功能揭秘:DriverStore Explorer的终极使用指南

5个隐藏功能揭秘&#xff1a;DriverStore Explorer的终极使用指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 还在为Windows系统越来越慢而烦恼吗&#xff1f;那些隐藏在深处…

作者头像 李华
网站建设 2026/3/17 5:48:44

COMSOL氨气催化裂解:不同压力、温度下的性能分析

COMSOL氨气催化裂解。 不同压力&#xff0c;不同温度下的NH3催化裂解。氨气&#xff08;NH₃&#xff09;催化裂解是一种常见的化学催化技术&#xff0c;广泛应用于石油 refining 和合成化学中。通过在催化剂的作用下&#xff0c;将长链烃类物质裂解为短链产物&#xff0c;同时…

作者头像 李华
网站建设 2026/3/14 11:27:28

Git监控工具终极指南:lazygit操作行为分析完全手册

Git监控工具终极指南&#xff1a;lazygit操作行为分析完全手册 【免费下载链接】lazygit 一个简化的终端用户界面&#xff0c;用于执行Git命令&#xff0c;旨在提高开发者使用Git的效率和体验。 项目地址: https://gitcode.com/GitHub_Trending/la/lazygit 在当今快速发…

作者头像 李华
网站建设 2026/3/15 21:53:04

Java 8都出了这么多年,Optional还是没人用?到底卡在哪了?

Java 8 都快 12 岁了&#xff0c;Optional<T> 确实还是“半红不紫”&#xff0c;真实项目里你打开一个 2025 年的 Spring Boot 代码库&#xff0c;十有八九还是满屏 if (obj ! null)&#xff0c;真正用好 Optional 的团队屈指可数。到底卡在哪&#xff1f;下面把真实原因…

作者头像 李华