朴素模式匹配算法(暴力寻找字串)

news2024/11/15 23:35:23

目录

  • 0. 前言
  • 1. 算法简介
  • 2. 代码实现
  • 3. 运行结果

0. 前言

使用朴素模式匹配算法查找子串是否位于主串中

开发环境:Dev-Cpp
操作系统:Windows10 专业版

1. 算法简介

朴素模式匹配算法,也称为暴力模式匹配算法或穷举法,是一种简单直接的字符串匹配算法。

算法思想: 在朴素模式匹配算法中,从主串的第一个字符开始与模式串进行比较,若相等,则继续比较下一个字符,否则从主串的下一个字符重新开始匹配。如果主串的剩余字符个数小于模式串的长度,则匹配失败;如果模式串的所有字符都能在主串中找到对应的字符,则匹配成功。

算法步骤:

  • 从主串的第一个字符开始,依次和模式串的第一个字符进行比较;
  • 如果两个字符相等,则比较下一个字符,直到模式串的最后一个字符;
  • 如果模式串的所有字符都能在主串中找到对应的字符,则匹配成功;
  • 如果模式串的某个字符与主串的某个字符不相等,则从主串的下一个字符重新开始匹配。

算法复杂度: 朴素模式匹配算法的时间复杂度为O((n-m+1)m),其中n为主串的长度,m为模式串的长度。最坏情况下,需要比较的次数为(n-m+1)m,即主串的每个字符都要进行m次比较。

算法优缺点: 朴素模式匹配算法实现简单,代码易于理解。但由于每次只比较一个字符,效率较低,适用于主串和模式串较短且规模较小的情况。对于较长的主串和模式串,建议使用其他更高效的字符串匹配算法,如KMP算法、Boyer-Moore算法等。

2. 代码实现

main.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
	
	//修改此处 s1为主串,s2为子串 
	char s1[] = "abcdefg";
	char s2[] = "abc";
	
	 
	int i,j;
	int len_main = strlen(s1);
	int len_son = strlen(s2);
	
	printf("s1 is '%s'\n",s1);
	printf("your find str is '%s'\n\n",s2);
	
	
	//取出所有 i-j 区间的子串 
	for(i=0;i<len_main-len_son+1;i++)
	{
		
		char temp[len_son+1] = {};
		j=i+len_son;
		
		//如果j大于字串长度,即错误退出 
		if(j>len_main)
		{
		printf("false\n");
		exit(0);
		}
		
		//开始找字串 
		for(int m=i,n=0;m<j;m++,n++)
			temp[n] = s1[m];
		
		//最后一位赋"\0"
		temp[len_son] = '\0';
		
		//比较  
		if(!strcmp(temp,s2))
		printf("√ s1[%d:%d] is '%s'\n",i,j,temp);
		else
		printf("× s1[%d:%d] not is '%s',that is '%s'\n",i,j,s2,temp);
	}
	
	printf("\nend\n");
	
	return 0;
} 

3. 运行结果

查找abc
在这里插入图片描述

查找def
在这里插入图片描述

查找 jfha(不存在)
在这里插入图片描述

以上为暴力算法的结果,如果主串长度过长,则会造成时间复杂度几何倍数增长

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000&#xff0c;烧录软件是HOPE3000。 这两款单片机都是8位的单片机&#xff0c;支持寄存器位操作。 HT45F24A单片机不带UART串口&#xff0c;要想实现串口功能&#xff0c;只能自己用定时…

基于肺部图片与文本信息的多模态模型架构

文章题为 「A transformer-based representation learning model with unified processing of multimodal input for clinical diagnostics」 https://www.nature.com/articles/s41551-023-01045-x &#xff08;arXiv版链接: https://arxiv.org/abs/2306.00864&#xff09; htt…

2020年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

2020 级考研管理类联考数学真题 一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。 1、某产品去年涨价 10%&#xf…

备战2024秋招面试题-Vue的框架原理

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;快秋招了&#xff0c;那么这个专栏就专门来记录一下&#xff0c;同时呢整理一下常见面试题 &#x1f49e;部分题目来自自己的面试题&#xff0c;部分题目来自网络整理 给我冲 学习目标&am…

阿里云服务器ECS介绍_云主机_服务器托管_弹性计算

阿里云服务器安全可靠、弹性可伸缩&#xff0c;CPU可选256核、内存选到3072GB&#xff0c;云服务器ECS规格通用型、计算型、内存型、通用算力型、裸金属、GPU、大数据等ECS实例规格&#xff0c;公网带宽可选到200M&#xff0c;绑定弹性公网EIP带宽可达1000M&#xff0c;共享带宽…

9.外部中断

1.中断概念&#xff1a; &#xff08;1&#xff09;STM32的每个IO口都可以作为外部中断输入&#xff1b; &#xff08;2&#xff09;stm32的中断控制器支持19个外部中断/事件请求 线0~15&#xff1a;对应外部IO口的输入中断&#xff1b;线16&#xff1a;连接到PVD输出&#…

基于jsp+Servlet+mysql的汽车销售系统

基于jspServletmysql的汽车销售系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.首页4.购物车5.添加车辆6、编辑车辆信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于JSPServlet的汽车销售系统 项目架…

新后端漏洞之----SSRF漏洞(服务端请求伪造)

笔记 前言SSRF漏洞概述SSRF漏洞检测与挖掘SSRF漏洞的回显分类SSRF漏洞利用SSRF漏洞防御 前言 这几天各种技术面试接踵而至&#xff0c;压得我喘不过气了&#xff01;然后面试官问了我这个SSRF漏洞原理和利用方式以及防御手段&#xff0c;当然同时还问了好几个Top10漏洞&#x…

【React】React Hooks解析

React Hooks解析 React 16.8 认识和体验Hooks 为什么需要Hook? Hook是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09; 我们先来思考一下class组件相对于函数式组件有什么优势&…

企业知识竞赛答题pk活动怎么做?

随着互联网的发展&#xff0c;越来越多的企事业单位开始利用答题小程序进行线上PK答题活动&#xff0c;目的在于组织员工学习企业文化或是进行专题答题活动以适应时代的进步。其中最主流的有&#xff1a;网络安全知识竞赛、安全生产知识竞赛、企业文化PK答题竞赛、红色党史知识…

js中的树以及优先遍历!

树 什么是树&#xff1f; 在生活中&#xff0c;大家对树肯定不陌生&#xff0c;小朋友都知道树不就是一类植物嘛&#xff0c;不管在任何地方都有各种各样的树。但是在计算机科学里面树是什么呢&#xff1f;一种分层数据的抽象模型&#xff0c;在我们前端工作中无处不在。在 J…

攻克数据中心液冷升级三大难题,宁畅推出“无忧焕液计划“

近年来&#xff0c;在政策引导、市场需求、技术升级等多种因素影响下&#xff0c;数据中心正在迎来发展新机遇。如何部署节能技术并兼顾算效、能耗、成本&#xff0c;成为考验数据中心建设与运营者的关键。 在此背景下&#xff0c;宁畅于6月28日召开“无忧焕液 智惠升级”媒体沟…

epoll反应堆

// epoll基于非阻塞I/O事件驱动 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/epoll.h> #inclu…

利用Python分析快手APP全国大学生用户数据

背景 背景&#xff1a;利用Python分析快手APP全国大学生用户数据&#xff0c;发现&#xff1a; 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP … 数据&#xff1a…

形式化验证,Gap-free Processor Verifification by S2QED and Property Generation(一)

目录 一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 &#xff08;2&#xff09;文献题目 &#xff08;3&#xff09;文献时间 &#xff08;4&#xff09;引用 二、Data:文献数据&#xff08;总结归纳&#xff0c;方便理解&am…

不漏测,测试人员的极致追求

一、什么是漏测&#xff1f; 具体地说&#xff0c;什么是测试漏测&#xff1f;测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。 我们知道&#xff0c;漏测是每一个软件测试者最头疼的事&#xff0c;一旦出现漏测&#xff1a; 首先给客户带来了非常不好…

C语言-基础语法学习-3 二级指针

目录 二级指针二级指针的定义和声明二级指针的初始化二级指针的使用二级指针和函数参数二级指针和动态内存分配数组指针二维数组二维数组的初始化二维数组与指针二维数组的遍历 二级指针 当涉及到多级指针时&#xff0c;C语言的灵活性和强大的指针功能可以得到充分的发挥。二级…

Xshell弹窗:需要Xmanager软件来处理X11转发请求(解决办法:关闭X11转发)

文章目录 问题背景问题分析什么是X11转发&#xff1f;分析原因&#xff08;没分析出来&#xff09; 解决办法&#xff08;关闭X11转发&#xff09;参考文章 问题背景 今天我在ubuntu服务器上用python flask框架做了个http服务程序&#xff0c;我用xshell连接服务器并执行该服务…

对话 | 中国团队首次完成“赫兹速率”的城域量子隐形传态

光子盒研究院 近日&#xff0c;电子科技大学郭光灿院士团队周强研究组与中科院上海微系统所尤立星团队合作&#xff0c;在电子科技大学“银杏一号”城域量子互联网方面取得了重大进展。 “银杏一号”城域量子互联网建设场地鸟瞰图和设计概念图。展示了一个量子隐形传态系统&…

神策(Android)- 在曝光采集基础上学习项目架构

开篇的时候我就在想这篇blog到底有没有意义&#xff1f;因为本身使用的就是神策提供的功能&#xff0c;同时神策也提供了很完善的文档&#xff0c;而唯一要我们做的也仅仅是将它正确的集成到项目内&#xff0c;并且随着版本升级&#xff0c;文档肯定也会有一定变更… 不过&…