第八次-字符串(一)

2023-11-13

字符串和多维数组

字符串
(1)串的逻辑结构
串:零个或多个字符组成的有限序列。
串长度:串中所包含的字符个数。
空串:长度为0的串,记为:" “。
非空串通常记为:
S=” s1 s2 …… sn "
其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤i≤n)是一个任意字符。
子串:串中任意个连续的字符组成的子序列。
主串:包含子串的串。
子串的位置:子串的第一个字符在主串中的序号。
S1="ab12cd "
S2=“ab12”
S3=“ab13”
(2)串的存储结构
顺序串:用数组来存储串中的字符序列。
串的长度的表示:
1,用一个变量来表示串的实际长度。
2,在串尾存储一个不会在串中出现的特殊字符作为串的终结符,表示串的结尾。
3,用数组的0号单元存放串的长度,从1号单元开始存放串值。
链接串:用链接存储结构来存储串。
改造链表实现串的链接存储:
1,非压缩形式
2,压缩形式

模式匹配
模式匹配:给定主串S="s1s2…sn"和模式T=“t1t2…tm”,在S中寻找T 的过程称为模式匹配。如果匹配成功,返回T 在S中的位置,如果匹配失败,返回-1。
应用包括:生物信息学(基因表达分析,基因配对)、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测。

BF算法
基本思想:
从主串S的第0个字符开始和模式T 的第0个字符进行比较,
若相等,则继续比较两者的后续字符;
否则,从主串S的第1个字符开始和模式T 的第0个字符进行比较,
重复上述过程,直到T 中的字符全部比较完毕,则说明本趟匹配成功;或S中字符全部比较完,则说明匹配失败。
说明:模式匹配过程要进行多趟的匹配,每趟匹配要进行若干次的比较
伪代码叙述
1.在串S和串T中设比较的起始下标i和j;
2. 循环直到S或T的所有字符均比较完;
2.1 如果S[i]==T[j],继续比较S和T的下一个字符;
2.2 否则,将i和j回溯(i=i-j+1,j=0),准备下一趟比较;
3. 如果T中所有字符均比较完,则匹配成功,返回匹配的起始比较下标(i-j);否则,匹配失败,返回-1;

int BF(char S[ ], char T[ ])
{
i=0; j=0;
while (i<S.Length()&&j<T.length())
{
if (S[i]==T[j]) {
i++; j++;
}
else {
i=i-j+1; j=0;
}
}
if (j>=T.length()) return (i-j);
else return -1;
}
设串S长度为n,串T长度为m,在匹配成功的情况下,考虑两种
极端情况:
⑴ 最好:不成功的匹配都发生在串T的第一个字符。
例如:S=“aaaaaaaaaabcdccccc”
T="bcd "
1,设匹配成功发生在si-1处,在这次匹配成功的过程中,总共进行了多少次比较?(包括之前失败的比较次数)
在i-1趟不成功的匹配中共比较了i-1次,
第i趟成功的匹配共比较了m次,
所以总共比较了i-1+m次.
S=“aaaaaaaaaabcdccccc”
T="bcd "
2,所有匹配成功的可能情况共有n-m+1种
3,匹配成功时平均的比较次数:

**最坏情况:**不成功的匹配都发生在串T的最后一个字符。
1,设匹配成功发生在si处,则在这次成功的比较过程中共进行了多少次比较?(包括之前失败的比较)
在i-1趟不成功的匹配中比较了(i-1)×m次,
第i趟成功的匹配共比较了m次,
所以总共比较了i×m次。
例如:S=“aaaaaaaaaaabccccc”
T=“aaab”
2,所有匹配成功的可能情况共有n-m+1种
3,匹配成功时平均的比较次数:
Pi 表示在第i个位置上匹配成功的概率,Pi=1/(n-m+1)

Pi 表示在第i个位置上匹配成功的概率,Pi=1/(n-m+1)

问题:
BF算法时间性能低:
在每趟匹配不成功时存在大量回溯,没有利用已经部分匹配的结果。
如何在匹配不成功时主串不回溯?
主串不回溯,模式就需要向右滑动一段距离。(i不移动,j>=0的位置继续进行下一次的比较)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第八次-字符串(一) 的相关文章

  • 线程池源码分析(一)

    最近在阅读 阿里巴巴Java开发手册 的时候 书中有这么一段话 线程池这块理解不是很深 今天就抽时间重新学习一遍 对于书中的问题分析完成后答案便一目了然 创建线程池的一个方式 ExecutorService e Executors newF
  • 三维重建_COLMAP安装、使用和参数说明(翻译自官方文档)

    近期因为想要入选学校某位很厉害的老师的某个项目 布置的小任务就是先把colmap以及openMVS跑一跑 我就记录了一下学习的经过 一 Ubuntu上源码编译colmap 参考网址 https colmap github io instal
  • 单片机串口控制树莓派3B播放HDMI视频,omxplayer,

    使用树莓派3B通过HDMI播放视频 并且使用串口去控制播放哪个视频 1 问题解耦 单片机串口控制树莓派3B播放视频 树莓派播放视频 单片机串口传参控制树莓派 树莓派播放视频 树莓派播放视频 并且能用串口这种简单的通信方式去控制 应该是需要安
  • java实现写大量数据到文件中

    生成 txt文件 生成 csv文件 生成 xls文件 import java io BufferedWriter import java io File import java io FileOutputStream import java
  • 【缓存】缓存,这么用才真正达到缓存的效果

    1 概述 转载 https zhuanlan zhihu com p 62508629 一 什么是缓存 平常的开发项目中 多多少少都会使用到缓存 因为一些数据我们没有必要每次查询的时候都去查询到数据库 一个形象的比喻 数据库是人的身体 缓存
  • 序列比对算法-计算生物学

    1 序列比对指将两个或多个序列排列在一起 标明其相似之处 序列中可以插入间隔 通常用短横线 表示 对应的相同或相似的符号 在核酸中是A T 或U C G 在蛋白质中是氨基酸残基的单字母表示 排列在同一列上 这一方法常用于研究由共同祖先进化而
  • CSS 3D转换——transform 属性的 rotatex() 方法和 rotatey() 方法

    目录 CSS 3D转换 浏览器支持 转换属性 3D Transform方法 常用方法 rotatex 方法 rotatey 方法 结语 CSS 3D转换 CSS3 允许我们使用 3D 转换来对元素进行格式化 浏览器支持 表格中的数字表示支持
  • 无线局域网下的远程控制、文件传输以及代理设置[Windows

    需求 在同一个路由器连接的局域网下 Ubuntu通过Windows端上网 Windows端远程控制Ubuntu系统 主机 Windows10 被操控端 Ubuntu18 04 在Windows方下载一个客户端 如Termius 远程控制和操
  • sql注入(报错注入)适用于union无法使用的情况

    extractvalue函数原理 这是一个对xml文件进行查询的函数 它的作用是 会从目标xml文件中返回所包含查询值的字符串 标准语法为 extractvalue XML document Xpath string extractvalu
  • for循环实现1-100之间偶数和

    package com itheima 04 需求 求出1 100之间偶数和 分析 A 定义求和变量 初始化值是0 B 获取1 100之间的数据 用for循环实现 C 把获取到的数据进行判断 看是否是偶数 如果是 就累加 D 输出求和结果
  • kernel:关于linux内核重要文件的基本描述

    linux Makefile 文件 这个Makefile文件的主要作用是指示make程序最终使用独立编译连接成的tools 目录中的build执行程序将所有内核编译代码连接和合并成一个可运行的内核映像文件 image 具体是对 boot 中
  • 协处理器cp15

    CP15访问CP15寄存器的指令 在基于ARM的嵌入式应用系统中 存储系统通常是通过系统控制协处理器CP15完成的 ARM处理器使用协处理器CP15的寄存器来控制cache 极高速缓存 TCM 高速缓存 和存储管理 CP15包含16个32位
  • anaconda的安装和常用指令

    1 下载anaconda之后 首先打开anaconda prompt 输入 conda version获取当前anaconda的版本 有可能会出现 首先要清理所有的包 conda clean packages tarballs 可以Win
  • 如何控制Spring bean的生命周期

    先了解下Spring bean的生命周期 创建 初始化 销毁 这对读懂Spring源码十分有帮助 控制Spring bean的生命周期有3种方式 下面分别用代码展示 方式一 Bean 注解上手动指定bean的初始化方法和销毁方法 Confi
  • 操作系统 存储管理 分页分段

    操作系统 存储管理 分页分段 分页存储管理 是将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页进行编号 从0开始 分页地址中的地址结构如下 页表实现了从页号到物理块号的地址映像 通过查找该表 即可找到每页在内存中的物理
  • c语言在线翻译器,【C语言】【window】--在线翻译器.doc

    C语言 Windows 在线翻译器 01 程序简介 程序名称 编译器 vs2010 其它也可以 程序大小 10K 文件包括 exe skinh she SkinH dll msvcr100 dll 程序界面 02 任务说明 光影队 任务 L
  • 自定义JSP中的Taglib标签之四自定义标签中的Function函数

    Java代码如下 自定义JSP中的Taglib标签之四自定义标签中的Function函数 package org lxh taglib import java util List public class FunctionTag publi
  • 报错"your evaluation license has expired, pycharm will now exit"

    1 修改C Windows System32 drivers etc hosts文件 将 0 0 0 0 account jetbrains com 添加到hosts文件的最后一行2 访问 http idea lanyus com 获取注册
  • NIO下载超大文件(支持20个G)

    服务端 nio将文件流写入response author zhanghp2017he foxmail com date 2022 8 22 param response return void exception RequestMappin
  • 【LeetCode75】第二十九题 删除链表的中间节点

    目录 题目 示例 分析 代码 题目 示例 分析 给我们一个链表 让我们把链表中间的节点删了 那么最直观最基础的办法是遍历两边链表 第一遍拿到链表长度 第二次把链表中间节点删了 这个暴力做法我没事过 不过貌似是可以解决问题的 所以我觉得这题的

随机推荐

  • React-router 5.0 利用高阶函数实现路由嵌套(web)

    如今 react router 已经升级到v5 0版本 v4 0版本做了较大的改革 代码中依然使用v3 0版本的写法 于是准备整改为v4 0以上版本 遇到了很多坑 于是做个笔记 首先 对比一下 v3 0 和 v4 0 版本 v4 0提供了r
  • librdkafka consumer封装的一点总结

    关于librdkafka producer可以看这里 consumer相较于producer需要注意的问题就少得多了 首先是初始化 string errstr unique ptr
  • 移植3- uboot之nandflash驱动移植

    2014 8 18 在上一篇文章中 我们已经将uboot启动起来了 但是如何将uboot spl搞到nandflash中去 这样可以拨动拨码开关选择nandflash启动 就可以从nandflash启动了呢 因此需要在uboot中实现nan
  • hooks api 详细demo

    本文所有代码demo https stackblitz com edit react hooks memo gwv9c6 file index js overview deep div How do React hooks really w
  • MYSQL group by后删除每个分组中的重复数据,只保留最新一条

    一 需求 MYSQL group by后删除每个分组中的重复数据 只保留最新一条 二 实现 获取 group by后每个分组中除去最新一条记录的其他重复数据 SELECT FROM test WHERE test user id IN 按照
  • 用python写一个猜数字小游戏

    需要用到python的random库来随机生成一个需要用户猜的数字 之后判断用户输入的数字 与生成的数字比较 并告知用户 先随机生成一个随机数 num random randint 1 49 随机生成一个1 49的数字 判断用户输入的数字
  • 数据结构-排序算法比较(内部排序)

    内部排序算法的比较 时间复杂度 最坏 最好 平均 注 直接插入 O n2 O n O n2 折半插入与之类似 冒泡 O n2 O n O n2 简单选择 O n2 与初态无关 希尔 O n1 3 具体不确定 快排 O n2 O nlog2n
  • transformer模型学习路线

    Transformer学习路线 完全不懂transformer 最近小白来入门一下 下面就是本菜鸟学习路线 Transformer和CNN是两个分支 因此要分开学习 Transformer是一个Seq2seq模型 而Seq2seq模型用到了
  • 字符串 验证回文串

    LC 验证回文串 Swift func isPalindrome s String gt Bool 字母转小写 let str s lowercased 去除标点等特殊字符 只留字母 let pattern a z let regex tr
  • WPF 控件库Live Charts 折线图多折线比较问题处理

    使用Live Charts功能对比多条折线时当Label不是一一对应时会发现折线无法对比如 Labels List
  • 指针和指针应用的区别

    转自 https www cnblogs com x wukong p 5712345 html http blog sina com cn s blog 673ef8130100imsp html 指针参数的传递 传递的是对指针的拷贝值
  • Ubuntu 笔记本麦克风没有声音解决方法

    1 查看你的声卡芯片型号在终端下 head n 1 proc asound card0 codec 获得型号 比如 gt proc asound card0 codec 0 lt Codec Realtek ALC272 gt proc a
  • Flask框架三:flask模版的详细介绍

    1 jinja2模版过滤器 1 1模板内置的过滤器 想要过滤的对象 使用的是什么过滤方法 args 例如 name length 将返回字符串的长度 而jinja2的过滤器就相当于是定义了很类似于length这样的函数 我们可以根据这些函数
  • 【安卓学习之常见问题】百度sdk不显示地图:此区域无卫星星图

    安卓学习之常见问题 百度sdk不显示地图 此区域无卫星星图 系列文章目录 提示 这里是收集了无人机的相关文章 安卓学习之DroidPlanner 1 Arduino学习 安卓学习之DroidPlanner FlightActivity的启动
  • 【重制版】10分钟学会WINDOWS、MAC、LINUX如何安装GPT桌面版

    文章目录 1 前言 2 Windows版下载安装 2 1 安装包 2 2 winget下载 注意看 不是wget 3 Mac版下载安装 3 1 安装包 3 2 homebrew安装 4 Linux版下载安装 4 1 安装包 4 2 终端下载
  • 爬虫(1)

    使用urllib获取百度首页源码 import urllib request 1 定义一个url 就是你要访问的地址 url http www baidu com 2 模拟浏览器向服务器发送请求 response urllib reques
  • pip install opencv问题ImportError: OpenCV loader: missing configuration file: ['config-3.6.py', 'conf

    Traceback most recent call last File train py line 1 in
  • Java并发编程学习16-线程池的使用(上)

    线程池的使用 上 引言 1 任务和执行策略间的隐性耦合 1 1 线程饥饿死锁 1 2 运行时间较长的任务 2 设置线程池的大小 总结 引言 前面的章节介绍了任务执行框架及其实际应用的一些内容 本篇开始将分析在使用任务执行框架时需要注意的各种
  • Android Studio Debug:编码五分钟,调试俩小时

    前言 整理并积累Android开发过程中用到的一些调试技巧 通过技巧性的调试技能 辅助增强代码的健壮性 安全性 正确性 案例一 抛出明显异常 常见的 除数为0问题 class MainActivty AppCompatActivity ov
  • 第八次-字符串(一)

    字符串和多维数组 字符串 1 串的逻辑结构 串 零个或多个字符组成的有限序列 串长度 串中所包含的字符个数 空串 长度为0的串 记为 非空串通常记为 S s1 s2 sn 其中 S是串名 双引号是定界符 双引号引起来的部分是串值 si 1