软考20-上午题-串及其模式匹配

串(字符串)是一种特殊的线性表,其数据元素为字符。如:"abc"。

一、串的定义

由字符构成的有限序列,是一种线性表。

串的比较:以字符的ASCII值作为依据。比较操作从两个字符串的第一个字符开始,字符的码值大者所在的串大;若其中一个串先结束,以串长较大者为大。

0:48

A:65

a:97

1-1、真题

真题1:

真题2:

此类题,套个示例即可。 

二、串的模式匹配

串的定位操作,称为串的模式匹配。

设有两个串s和t,要在串s中找到与t相等的子串。通常将s称为目标串,t称为模式串,即:子串。

2-1、朴素模式匹配

时间复杂度:

最好:O(m)

最坏:O(n*m),(n-m+1)*m

平均:O(n+m)

2-2、KMP模式匹配 

朴素模式匹配的改进。

改进之处:匹配过程,出现相比较的字符串不相等时,不需要回溯主串的指针,利用已经得到的部分匹配结果,将子串向后滑动尽可能远的距离,再继续比较。

计算子串向后滑动尽可能远的距离,就是计算next[j]的值。

前缀:包含第一个字符,但不包含最后一个字符的子串。

后缀:包含最后一个字符,但不包含第一个字符的子串。

最长相等前后缀:前缀和后缀相等的最长子串。

例如字符串“abca”

  • 前缀:{a,ab,abc}
  • 后缀:{a,ca,bca}
  • 最长相等前后缀:a

第i个字符的next值 = 从1到i-1串中最长相等前后缀长度+1 。

特殊情况:

next[1] = 0

next[2] = 1

示例:求next[5]

 len = 1时,前缀a = 后缀a,√

len = 2时,前缀aa = 后缀aa,√

len = 3时,前缀aaa = 后缀aaa,√

len = 4时,不可取,因为前缀包含了最后一个字符,后缀包含了第一个字符

所以,一共可取的最大len = 3,所以next[5] = 3+1 = 4。

KMP模式匹配的简单了解

当发生不匹配时,j回退,但是i不回退了,i会一直前进!!!

具体j回退到哪一位,就用next[j]求值。 

因为,next[j] = next[5] = 4,所以,j回退到第四位。

好处,前j位和主串是匹配的。 

2-3、真题

真题1:

真题2:

真题3:

真题4:

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

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

相关文章

OpenResty 安装

安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 1)安装开发库 首先要安装OpenResty的依赖开发库,执行命令: yum install -y pcre-devel openssl-devel gcc --skip-broken2)安装OpenResty仓库 你可以在你的 CentOS 系统中…

防火墙 firewalld 实操

3. 防火墙 firewalld 最近在学习部署一套linux 环境,分享其中一部分,后边会归结到专栏,欢迎大家订阅!!! 查看 firewalld 状态 service firewalld status上图表示启动中 查看开放端口 firewall-cmd --zonep…

Python算法100例-1.2 兔子产子

完整源代码项目地址,关注博主私信’源代码’后可获取 1.问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为…

《Python 网络爬虫简易速速上手小册》第6章:Python 爬虫的优化策略(2024 最新版)

文章目录 6.1 提高爬虫的效率6.1.1 重点基础知识讲解6.1.2 重点案例:使用 asyncio 和 aiohttp 实现异步爬虫6.1.3 拓展案例 1:利用 Scrapy 的并发特性6.1.4 拓展案例 2:使用缓存来避免重复请求 6.2 处理大规模数据爬取6.2.1 重点基础知识讲解…

面试八股文(4)

文章目录 1.sleep和wait区别2.为什么调用start()方法会执行run()方法,为什么不能直接调用run()方法3.synchronized关键字4.并发编程的三个重要特性5.synchronized和volatile关键字区别6.ThreadLocal7.为什么要用线程池?8.实现Runnable接口和Callable接口…

vscode无法ssh远程连接到服务器:远程主机可能不符合 glibc 和 libstdc++ VS Code 服务器的先决条件

vscode无法ssh远程连接到服务器:远程主机可能不符合 glibc 和 libstdc VS Code 服务器的先决条件 今天vscode自动更新后无法连接到远程服务器了,提示"远程主机可能不符合 glibc 和 libstdc VS Code 服务器的先决条件" 并且命令窗口一直显示&qu…

【图论】基环树

基环树其实并不是树,是指有n个点n条边的图,我们知道n个点n-1条边的连通图是树,再加一条边就会形成一个环,所以基环树中一定有一个环,长下面这样: 由基环树可以引申出基环内向树和基环外向树 基环内向树如…

platfrom tree架构下实现3-Wire驱动(DS1302)

目录 概述 1 认识DS1302 1.1 DS1302 硬件电路 1.2 操作DS1302 1.3 注意要点 2 IO引脚位置 3 添加驱动节点 3.1 更新内核.dts 3.2 更新板卡.dtb 4 驱动程序实现 4.1 编写驱动程序 4.2 编写驱动程序的Makefile 4.3 安装驱动程序 5 验证驱动程序 5.1 编写测试程序…

AI-数学-高中-21-三角函数-cosx的图像与性质

原作者视频:三角函数】8cosx的图像与性质(易中档)_哔哩哔哩_bilibili cosx图像:就是sinx往左平移π/2的图像。 对称中心:找到一个点,翻转180度能跟自己重合。

QXlsx Qt操作excel

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件(.xlsx格式)。该库支持多种操作,包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 支持跨平台…

Intellij IDEA各种调试+开发中常见bug

Intellij IDEA中使用好Debug,主要包括如下内容: 一、Debug开篇 ①、以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。 ②、断点:在左边行…

【日常总结】SourceTree 1.5.2.0 更换用户名称和密码

一、场景 二、问题 三、解决方案 > 方案一:删除缓存文件 > 方案二:更新最新版本,可以直接修改密码(推荐) 方案一:删除缓存文件 Stage 1:设置显示隐藏文件 Stage 2:打开…