【串,BF算法】

news2025/7/27 4:59:01

文章目录

  • 串(String)---- 零个或多个任意字符组成的有限序列
    • 串的定义----几个术语
  • 串的类型定义,存储结构及运算
    • 串的顺序串结构
    • 串的链式串结构
    • 串的链式结构
    • 串的模式匹配算法----BF算法

串(String)---- 零个或多个任意字符组成的有限序列

在这里插入图片描述

串的定义----几个术语

  • 子串:串中任意个连续字符组成的子序列称为该串的子串。
  • 主串:包含子串的串相应地称为主串。
  • 字符位置:字符在序列中的序号为该字符在串中的位置。
  • 子串位置:子串第一个字符在主串中的位置。
  • 空格串:由一个或多个空格组成的串,与空串不同。
  • 串相等:当且仅当两个串的长度相等并且各个对应位置上的字符相同时,这两个串才相等。(所有的空串是相等)。

在这里插入图片描述

串的类型定义,存储结构及运算

ATD String{
数据对象
数据关系
基本操作
}

串的顺序串结构

//串的顺序存储结构
typedef struct {
	char ch[MAXLEN + 1];//一维数组存数据
	int length;//串的长度
}SString;

串的链式串结构

//串的链式存储结构
typedef struct Chunk{
char ch[CHUNKSIZE];
struct Chunk* next;
}Chunk;
typedef struct {
	Chunk* head, * tail;//串的头指针,尾指针
	int curlen;//串的当前长度
}LString;//字符串的块链结构

串的链式结构

因为链式结构操作方便,但存储密度很大。
所以改变方式就是在一个串的每一个结点存储多个字符。

串的模式匹配算法----BF算法

采用穷举法
B-F简称为BF算法,简称为单匹配算法。
在这里插入图片描述

算法的思路是从每一个字符开始依次与T的字符进行匹配。

Index(S,T,pos)

  • 将主串的第pos个字符和模式串的第一个字符比较,
  • 若相等,继续逐个比较后续字符;
  • 若不等,从主串的下一个字符起,重新与模式串的第一个字符作比较。
    直到主串的一个连续字符序列与模式串相等。返回值为S中与T匹配的子序列的第一个字符的序号,即匹配成功。
    否则,匹配失败,返回值0;
int IndexBF(SString S, SString T,int pos) {
	int i = pos, j = 1;
	while (i<=S.length && j<=T.length)
	{
		if (S.ch[i] == T.ch[j]) {
			++i, ++j;//主串和子串依次匹配下一个字符
		}
		else {
			i = i - j + 2;//主串,子串指针回溯重新开始下一次匹配
			j = 1;
		}
		if (j >= T.length) {
			return i - T.length;//返回匹配的第一个字符的下标
		}
		else {
			return 0;//模式匹配不成功
		}
	}
}
	

在这里插入图片描述

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

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

相关文章

蓝桥杯刷题

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; &#x1f449;&#x1f3fb;最大降雨量 原题链接&#xff1…

【设计模式】第24节:行为型模式之“模板方法模式”

一、简介 模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下&#xff0c;重新定义算法中的某些步骤。 模板模式有两大作用&#xff1a;复用和扩展。其中&#xff0c;复用指的是&#…

星环科技Sophon 3.2发布,通过“六易三仓两中心”实现新一代AI平民化

针对目前各行业用户在落地广泛业务需求分析、处理多重数据模态对接、跟进高度定制场景问题解决、运营多源多框架AI模型等方面的问题&#xff0c;星环科技自主研发的一站式智能分析工具平台Sophon在近日的向星力•未来数据技术峰会上推出了3.2版本。 3.2版本的Sophon通过以数据…

硬件测试(二):波形质量

一、信号质量测试 信号在传输的过程中&#xff0c;一般不是标准的矩形波信号&#xff0c;信号质量测试即通过示波器测试单板硬件的数字信号和模拟信号的各项指标&#xff0c;包括电源、时钟、复位、CPU小系统、外部接口&#xff08;USB、网口、串口&#xff09;、逻辑芯片(CPLD…

数据库-用户权限管理

创建用户&#xff1a; create user testlocalhost identified by 123456; create user 创建用户的固定开头 testlocalhost test为用户名&#xff0c; localhost:新建用户可以在哪些主机上登录&#xff0c;即使可以使用IP地址&#xff0c;网段主机名都可以 identified by 1…

【C语言初阶】之函数

【C语言初阶】之函数 1. 函数是什么2. C语言中的函数2.1 库函数2.2.1 利用文档学习库函数 2.2 自定义函数 3. 函数参数3.1 实际参数(实参)3.2 形式参数(形参) 4. 函数调用4.1 传值调用4.2 传址调用4.3 练习 5. 函数的嵌套调用和链式访问5.1 嵌套调用5.2 链式访问 6. 函数的声明…

基于秃鹰算法的无人机航迹规划-附代码

基于秃鹰算法的无人机航迹规划 文章目录 基于秃鹰算法的无人机航迹规划1.秃鹰搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用秃鹰算法来优化无人机航迹规划。 1.秃鹰搜索算法 …

php实现关键词过滤

1. 构建关键词库 首先&#xff0c;你需要构建一个包含敏感关键词的库。你可以将这些敏感关键词存储在一个数组中&#xff0c;或者将它们存储在数据库中。 $keywords array(敏感词1,敏感词2,敏感词3,// 其他敏感词 ); 2. 实现关键词过滤函数 接下来&#xff0c;你需要实现一个…

对云计算的热爱,王坚院士为何从未减弱,而且更强烈了?

引言&#xff1a;云计算作为基础设施 未来将大放异彩吗&#xff1f; 【阿明观察 &#xff5c; 热点关注】 许久未见王坚院士的演讲&#xff0c;在2023杭州云栖大会&#xff0c;我看到他现场的分享指出&#xff0c;由于GPT的模型出现&#xff0c;计算对科技创新自身在产生革命…

有什么可以自动保存微信收到的图片和视频的方法么

8-1 在一些有外勤工作的公司里&#xff0c;经常会需要在外面工作的同事把工作情况的图片发到指定微信或者指定的微信群里&#xff0c;以记录工作进展等&#xff0c;或者打卡等&#xff0c;对于外勤人员来说&#xff0c;也就发个图片的事&#xff0c;但是对于在公司里收图片的人…

【ECharts】保姆级从空白项目到Echarts地图

前提 请先创建好一个空白的vue项目&#xff0c;准备好一个用于写Echarts地图的空白vue文件 准备好一个空白的vue页面后&#xff0c;只需要跟着我一步一步做 就可以达到我最后展示的效果&#xff01;&#xff01;&#xff01; 资源下载 ECharts npm install echarts地图 jso…

android查漏补缺(8)Binder framework架构和调用方法

1.Binder简介 Binder是android系统中实现进程间通信的主要组件&#xff0c;包括各种AMS,PMS,SMS等服务和APK的通信都是通过binder实现。但是调用过PMS的同学肯定会有疑问&#xff0c;既然是进程通信&#xff0c;怎么没有消息的发送和接收&#xff0c;为什么调用不同进程的服务的…

Git工作原理和常见问题处理方案

博客定位Git工作区域工作区域划分暂存区设计目的 Git基本操作核心操作初始化和配置指令 HEAD指针Git版本回滚指令介绍reset模式reset hard使用场景reset soft使用场景reset mixed使用场景reset使用注意事项checkout使用场景 Git分支管理什么是分支分支应用场景分支相关指令被合…

OS 死锁

资源问题 引起死锁的主要是需要采用互斥访问方法的、不可被抢占的资源 可重用资源和可消耗资源 可重用资源 定义&#xff1a;一种可供用户重复使用多次的资源 性质&#xff1a; 每个可重用资源中的单元&#xff0c;只能分配给一个进程使用&#xff0c;不允许多个进程共享…

NVME CMB原理和常规使用方案详解

什么是CMB 在NVMe Express 1.2 Spec中开始支持一个特性&#xff0c;那就是CMB&#xff08;Controller Memory Buffer&#xff09;&#xff0c;是指SSD控制器内部的读写存储缓冲区&#xff0c;与HMB&#xff08;Host Memory Buffer&#xff09;的不同处在于所使用的内存地址位于…

ffplay是做什么的

目录 ffplay是什么 一、ffplay的基本使用 二、ffplay播放控制 三、常用参数 ffplay是什么 ffplay 是FFmpeg提供的一个极为简单的音视频媒体播放器&#xff08;由ffmpeg库和SDL库开发&#xff09;&#xff0c;可以用于音视频播放、可视化分析 &#xff0c;提供音视频显示和播…

微信小程序面试题之理论篇

本文内容&#xff0c;来源于极客学院的分享&#xff0c;这里只做引用。 说说你对微信小程序的理解?优缺点? 背景 小程序与H5 优缺点 优点&#xff1a;缺点&#xff1a; 说说微信小程序的生命周期函数有哪些&#xff1f; 应用的生命周期页面的生命期组件的生命周期执行过程 应…

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测&#xff08;二&#xff09;&#xff1a;训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测…

Jmeter 汉化中文语言

找到 bin -> jmeter.propertise 修改参数&#xff1a;languageen --> languagazh_CN OK&#xff01;