news 2026/4/23 17:16:11

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/4/23 11:55:50

一文详解如何转型AI产品经理

01 为什么要转型AI产品 大家都知道&#xff0c;当前的AI已经在模拟某些人类认知功能方面取得了显著进展&#xff0c;甚至在很多特定任务上超越了人类。 介绍了AI是如何实现像人类一样思考的&#xff0c;感兴趣的朋友可以去看一看。 未来很多事情&#xff0c;都能交给AI来完成。…

作者头像 李华
网站建设 2026/4/23 14:31:59

Pyomo优化建模完全指南:从入门到精通

Pyomo优化建模完全指南&#xff1a;从入门到精通 【免费下载链接】pyomo An object-oriented algebraic modeling language in Python for structured optimization problems. 项目地址: https://gitcode.com/gh_mirrors/py/pyomo 在当今数据驱动的世界中&#xff0c;优…

作者头像 李华
网站建设 2026/4/23 13:09:14

哪吒监控:3个理由告诉你为什么这款自托管监控工具值得拥有

哪吒监控&#xff1a;3个理由告诉你为什么这款自托管监控工具值得拥有 【免费下载链接】nezha :trollface: Self-hosted, lightweight server and website monitoring and O&M tool 项目地址: https://gitcode.com/GitHub_Trending/ne/nezha 还在为服务器宕机而夜不…

作者头像 李华
网站建设 2026/4/23 13:09:13

智能数据建模软件DTEmpower 2025R3版本发布

天洑智能数据建模软件DTEmpower在2025R2版本基础上&#xff0c;新增大量更新和Bug修复&#xff0c;持续提升软件性能&#xff0c;改善用户体验。现DTEmpower 2025R3版已正式上线天洑软件官网&#xff0c;欢迎下载体验&#xff01;R3版本主要更新&#xff1a;一、新增趋势分析功…

作者头像 李华
网站建设 2026/4/23 14:30:25

天洑获任南京市工业软件产教联合体副理事长单位

近日&#xff0c;江北新区工业软件产教融合专题会议暨南京市工业软件产教联合体签约授牌仪式在南京江北新区中央商务区举行。本次会议以启动工业软件产教联合体筹备工作为主题&#xff0c;旨在深化工业软件领域政产学研协同合作。会议期间&#xff0c;组织了“工业软件产业学院…

作者头像 李华