记录一下自己的优化字符串匹配算法

news/2025/1/10 0:54:14/文章来源:https://www.cnblogs.com/churk/p/18522619

我愿称之KeBF算法

Ke的BF(Brute Force,暴力检索)法

关于其他 字符串匹配算法

示例源码

#include <stdio.h>
#include <string.h>int main()
{// 读入两个字符串char ms[100], ps[100];fgets(ms, sizeof(ms), stdin);fgets(ps, sizeof(ps), stdin);// 去掉换行符ms[strcspn(ms, "\n")] = '\0';ps[strcspn(ps, "\n")] = '\0';int j = 0, index[100];int msL = strlen(ms);int psL = strlen(ps);// 算法实现for (int i = 0; i <= msL - psL; ){if ((msL - i) < psL)break;int t = 0;while (t < psL && ms[i + t] == ps[t])t++;if (t == psL){index[j] = i;j++;i += t;}elsei += (t > 0) ? t : 1;}// 输出结果if (j > 0)for (int i = 0; i < j; i++)printf("%d ", index[i]);elseprintf("None");printf("\n");return 0;
}

与FittenCode的斗志斗勇

大胜利!

最后——

谁能拒绝一个写法比KMP简单,时间复杂度摸摸KMP(O(n) & O(m+n)),空间复杂度大概持平KMP的可可爱爱的KeBF呢😘

附 KMP 示例源码

别问,问就是fittenCode写的()

#include <stdio.h>
#include <string.h>// 函数声明
void computeNext(const char *pattern, int *next);
void kmpSearch(const char *text, const char *pattern);int main() {char text[100];char pattern[100];// 输入主串和模式串printf("请输入主串: ");fgets(text, sizeof(text), stdin);printf("请输入模式串: ");fgets(pattern, sizeof(pattern), stdin);// 去掉换行符text[strcspn(text, "\n")] = '\0';pattern[strcspn(pattern, "\n")] = '\0';// 调用 KMP 查找函数kmpSearch(text, pattern);return 0;
}// 计算模式串的 next 数组
void computeNext(const char *pattern, int *next) {int m = strlen(pattern);next[0] = 0; // next[0] 是始终为 0int j = 0; // j 代表前缀长度for (int i = 1; i < m; i++) {while (j > 0 && pattern[i] != pattern[j]) {j = next[j - 1]; // 回溯到前一个最佳匹配}if (pattern[i] == pattern[j]) {j++; // 匹配继续}next[i] = j; // 记录当前字符匹配的前缀长度}
}// KMP 字符串查找
void kmpSearch(const char *text, const char *pattern) {int n = strlen(text);int m = strlen(pattern);int next[m];// 计算模式串的 next 数组computeNext(pattern, next);int j = 0; // j 代表当前匹配的模式串中的位置for (int i = 0; i < n; i++) {while (j > 0 && text[i] != pattern[j]) {j = next[j - 1]; // 发生不匹配,回溯到前一个最佳匹配}if (text[i] == pattern[j]) {j++; // 字符匹配,移动到模式串的下一个位置}if (j == m) {printf("找到匹配,起始位置: %d\n", i - m + 1); // 找到匹配,输出起始位置j = next[j - 1]; // 准备进行下一个匹配}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825938.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收集一些好看的图片

收集一些好看的背景和头像背景 游戏像素其它头像

海南话语音识别模型——模型训练(一)

上篇文章已经介绍了语料数据的预处理,对数据集中的音频数据分别做了重采样、静音切除、降噪以及在Fbank和MFCC中特征提取方式中选择了Fbank对音频数据进行特征提取的方法;在经过上面的处理后已经可以将提取出的音频数据Fbank丢到Transformer中进行训练,但还漏了一个比较重要…

2024秋软件工程iman现场编程作业

作业所属课程 班级的链接作业要求 2024秋软件工程现场编程作业 - 作业 - 软件工程2024 - 班级博客 - 博客园作业目标 现场极限编程,制作一个个人记账本程序。团队名称 iman团队成员 102202146 - 蓝敏龙, 102201225 - 陈碧煌, 102202105 - 王梓铭, 102202124 - 阿依娜孜, 10220…

4 Empirical Properties of Limit Order Books

LOB 可以揭露很多有趣的微观信息,近年来也有许多研究。但需要注意:高频交易的进化速度极快,让这些研究很多时候比较过时。 Originally Posted at: https://clouder0.com/zh-cn/posts/lob-empirical-properties/ 总结性的来说,作者发现了这些特点:每日交易量大概占市值的 \…

2024秋软工实践iman原型设计和UML设计

信息类别 内容作业所属课程 软件工程实践 - 秋季班作业要求 第一次团队作业 - 原型设计与概要设计作业目标 根据需求分析和设计,完成项目的原型设计和概要设计,培养团队协作能力,为后续的开发奠定基础。团队名称 iman 🌟团队成员 - 102202146 - 蓝敏龙- 102201225 - 陈碧煌…

CF1658E Gojou and Matrix Game

题意题解 设f[i,j]表示(i,j)先手必胜/必败 则全局max一定必败,因为先手走出去后手走回来,重复无限次后必输 然后全局max外(距离>k)的必胜,因为可以走到全局max 之后可以发现,下一个必败的是全局max范围内的次max,因为次max不能①走出全局max范围 ②走到全局max ③走到…

20222422 2024-2025-1 《网络与系统攻防技术》实验四实验报告

一、实验内容 1、恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具; (2)使用超…

【Atcoder训练记录】AtCoder Beginner Contest 378

训练情况赛后反思 简单题又WA了一发,淦,开局崩心态,然后做题的时候被场外因素打断了。 A题 统计 \([1,4]\) 中每个数字出现的个数,输出对数即可。 #include <bits/stdc++.h> #define int long longusing namespace std;int cnt[5];void solve(){for(int i = 1;i<=…

《使用Gin框架构建分布式应用》阅读笔记:p307-p392

《用Gin框架构建分布式应用》学习第16天,p307-p392总结,总86页。 一、技术总结 1.AWS chapter 08讲使用AWS进行部署,可以根据需要选择是否阅读。因为使用到的概率很小,且还要绑卡,本人选择跳过。 2.CI/CD (1)什么是CI/CD p348,Luckily, many deployment steps can be aut…

基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现六

三、系统部分功能描述物品分类信息业务逻辑层Service、小区信息业务逻辑层Service、快递柜格子信息业务逻辑层Service、投诉信息业务逻辑层Service、快递柜类型信息业务逻辑层Service、快递柜信息业务逻辑层Service一、前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化…

团队作业3——需求改进系统设计

这个作业属于哪个课程 班级地址这个作业要求在哪里 作业要求这个作业的目标 需求改进&系统设计评分基准:需求&原型改进 - 20分系统设计 - 50分Alpha任务分配计划 - 20分测试计划 - 10分一、需求&原型改进: 1.1针对课堂讨论环节老师和其他组的问题及建议,对修改选…

2024年仿真/CAE 软件市场报告

CAE仿真市场的影响CAD、CAE呈融合趋势设计方法的革命--分析/模拟MCAE 是 MFG 设计软件的最大部分MFG设计,全称Manufacturing Design,即制造设计。它是一种在产品设计阶段就考虑制造过程的工程实践,旨在提高产品的可制造性,降低生产成本,缩短生产周期,并提升产品质量。 MC…