当前位置: 首页 > news >正文

串的匹配算法——BF算法(朴素查找算法)

串的模式匹配:在主串str的pos位置查找子串sub,找到返回下标,没有找到返回-1。

1.BF算法思想

相等则继续比较,不相等则回退;回退是i退到刚才位置的下一个(i-j+1);j退到0;利用子串是否遍历完成,来判断是否查找成功;(注意:不能利用主串来判断)


2.代码实现

int BF(const char* str, const char* sub, int pos)
{assert(str != NULL && sub != NULL);if (str==NULL||sub==NULL||pos<0 || pos>strlen(str))return -1;int i = pos;int j = 0;int lenstr = strlen(str);int lensub = strlen(sub);//while (str[i] != '\0' && sub[j] != '\0')while(i < lenstr&&j < lensub){if (str[i] == sub[j]){i++;j++;}else{i = i - j + 1;//刚才位置的下一个j = 0;}}//判断是否查找成功,利用子串是否遍历完成,来判断是否查找成功//if (sub[j] == '\0')if(j>=lensub)return i - j;elsereturn -1;
}	int main()
{const char* str1 = "ababcabcdabcde";const char* str2 = "abcd";printf("%d\n", BF(str1, str2, 0));printf("%d\n", BF(str1, str2, 6));const char* str3 = "aaaaab";const char* str4 = "aaaab";printf("%d\n", BF(str3, str4, 0));printf("%d\n", BF(str3, str4, -1));printf("%d\n", BF(str3, str4,8));const char* str5 = "abcd";const char* str6 = "ae";printf("%d\n", BF(str5, str6, 0));return 0;
}

注:此算法时间复杂度为O(n*m)

http://www.lryc.cn/news/313080.html

相关文章:

  • 数据处理分类、数据仓库产生原因
  • 【力扣100】 118.杨辉三角
  • 好物周刊#44:现代终端工具
  • 每日五道java面试题之springMVC篇(一)
  • 【GStreamer】basic-tutorial-4:媒体播放状态、跳转seek操作
  • IPSEC VPN 网关模式实验
  • 想在Vue中使用v-for来循环遍历一组对象,但只循环三次
  • Blazor系统教程(.net8)
  • Day15:技术架构、Maven、Spring Initializer、Spring全家桶、Spring IoC
  • [c/c++] const
  • 生成商品条码
  • langchain学习笔记(十一)
  • LabVIEW高温摩擦磨损测试系统
  • 基于YOLOv5的驾驶员疲劳驾驶行为​​​​​​​检测系统
  • 融合软硬件串流多媒体技术的远程控制方案
  • Spring中的数据校验---JSR303
  • “揭秘网络握手与挥别:TCP三次握手和四次挥手全解析“
  • Java开发工程师面试题(Spring)
  • 【C++】string类的基础操作
  • Java项目:40 springboot月度员工绩效考核管理系统009
  • opengl 学习(三)-----着色器
  • 电销平台架构的演变与升级
  • 轻薄蓝牙工牌室内人员定位应用
  • 好物周刊#46:在线工具箱
  • 20240306-1-大数据的几个面试题目
  • Vue中如何处理用户权限?
  • 【STM32】HAL库 CubeMX教程---基本定时器 定时
  • 2024年最新整理腾讯云学生服务器价格、续费和购买流程
  • 【QT】重载的信号槽/槽函数做lambda表达式
  • C++之类(一)