算法与数据结构 第四章 字符串(详解)
目录
一、判断题
二、选择题
在开始之前,先为大家推荐两篇介绍该章两个主要算法的的文章,供大家参考。
KMP算法详解:KMP算法(快速模式匹配算法)C语言详解
求后缀表达式:求后缀表达式
一、判断题
1、如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。F
解析:错,子串必须是连续的。
二、选择题
1、下面关于字符串的程序,其输出结果是
#include <stdio.h>void fun(char s[], char t) {int i = 0;while (s[i]) {if (s[i] == t)s[i] = t - 'a' + 'A';i++;}
}
int main() {char str[100] = "abcdefg", c = 'd';fun(str, c);printf("%s\n", str);return 0;
}
A.abcDefg
B.abcdefg
C.ABCdEFG
D.ABCDEFG
解析:t-’a’+’A’是求t对应的大写字母。该题用函数调用的方法,将给定字母在该字符串中对应的字母变为大写并输出。
2、串“ababaabab”的nextval为( )。
A.010100011
B.010104101
C.010101011
D.010102101
解析:ababaabab
next:011234234
nextval:010104101
例:aabbc
next:02121
nextval:00121
求next的时候用next[k]=k+1,第一个为0,其余没有的情况为1,其余为k+1
nextval的时候是将字符和p[k]的值比较,如果不同就为k,如果相同k=next[k],继续比较。
3、若串S="software",其子串的数目是
A.36
B.8
C.37
D.9
解析:首先,software没有重复字符,长度为8.1个字符的子串有8个;2个字符的子串有8-1个;3个字符的子串有8-2个;……7个字符的子串有8-6个;8个字符的子串有8-7个,总数是1+2+3……+8=36个,再加上一个空串,是37个。
但问题是很多情况下,子串有重复的情况,比如:abbbc,子串只有3+2+3+2+1=11个,而不是1+2+3+4+5=15个。又如,abab,子串有2+2+2+1个。所以在计算时,要去除重复子串的情况。
4、
解析:两种求法:
第一种:第一位默认-1,之后的每一位是它之前的字符串最长公共前缀后缀长度;
第二种:第一位默认0,第二位默认1,之后每一位是它之前的字符串最长公共前缀后缀长度+1;
优化特征向量 nextval:
nextval的求解需要比较s中next[i]所在位置的字符是否与s[i]的字符一致,如果一致则用s[next[i]]的nextval的值作为nextval[i],如果不一致,则用next[i]做为nextval[i];
第一种方法:next={-1,0,0,0,1,2,1},nextval={-1,0,0,-1,0,2,1}
第二种方法:next={0,1,1,1,2,3,1},nextval={0,1,1,1,2,1,1}
5、设主串T=abaabaabcabaabc,模式串S=abaabc,采用KMP算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是:
A.15
B.12
C.10
D.9
解析:求next数组,next={-1,0,0,1,1,2};
开始匹配
abaabaabcabaabc
abaabc
当比较到s[5]时,不成功,比较6次;
abaabaabcabaabc
-----abaabc
根据next[5]=2,移动S到S[2]处,从S[2]处开始比较,比较4次,成功;
一共比较10次。
上面的题目均是博主在期末考试前总结的重难点,欢迎各位大佬指正错误或者给出更优质的解析。
算法与数据结构 第四章 字符串(详解)相关推荐
- JavaWeb --第四章Maven详解
JavaWeb --第四章Maven详解 文章目录 Maven Maven架构管理工具 下载安装Maven 配置环境变量 阿里云镜像 本地仓库 在IDEA中使用Maven 创建一个普通的Maven项目 ...
- 算法与数据结构 第四章 树与二叉树
第四章树 一.选择题(20分) 1.在下述结论中,正确的是: ( ) ① 只有2个结点的树的度为1: ② 二叉树的度为2: ③ 二叉树的左右子树可任意交换: ④ 在最大堆(大顶堆)中,从根到任意 ...
- 数据结构第四章字符串MOOC整理
1.若串S1='ABCDEFG', S2='9898' ,S3='###',S4='012345',执行 concat(replace(S1,substr(S1,length(S2),length(S ...
- 第十四章:详解Jenkins节点配置
2014-03-02:修正对于lable标签的理解.(1.532.1版本已经给出了官方解释) 2013-12-22:添加JNLP端口修改,修改了一些错误. Jenkins有个很强大的功能:分布式构建( ...
- AcWing提高算法课Level-3 第四章 高级数据结构
AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...
- python 字符串替换_Python基础教程,第四讲,字符串详解
本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...
- 判断字符串格式_Python基础教程,第四讲,字符串详解
本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...
- 《算法笔记》第四章笔记
<算法笔记>第四章 排序 排序算法的思想都比较简单,而且c++可以直接用sort函数进行排序,一般不会直接写排序代码 归根到底就是每轮处理一个数据,n个数据只需处理n-1次即可变得有序 选 ...
- 数据结构实验四 :字符串和多维数组
数据结构实验四 :字符串和多维数组 本次实验内容: 1.从键盘输入一些文本,统计文本单词的个数. 2.写程序输出一个5阶幻方:每一行每一列每一个对角线和均相等. 3.自己设计一个字符加密算法,并设计程 ...
最新文章
- echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
- php foreach next,foreach next 操作数组指针移动问题,多个数连加,连除,连减,连乘php版本...
- JVM基于栈的解释器执行原理
- 雾霾模糊?图像增强教你如何去雾
- nginx 实现负载均衡
- win10无法装载iso文件_教你用win10自带虚拟光驱打开iso镜像文件的方法
- MFC动态修改Static Text控件caption
- 智能交通领域权威期刊会议
- Git检查现有 SSH 密钥
- 白话CMPP、SGIP
- 微信小程序——简单饮食推荐(四)
- OLTP与OLAP理解
- nuxt 设置路由的meta属性,nuxt 怎么设置路由的meta,nuxt 怎么设置router的meta
- 在线订舱物流详情 广州力其
- 文字底部或者中间 加横线
- Windows系统批量修改文件后缀名/扩展名
- 华工2018计算机网络随堂练习,计算机网络随堂练习-华工2019随堂练习
- 「 MalabSimulink 」X0 returned by MATLAB S-function ‘NLSEF‘ in ‘ADRC_NN/S-Function1‘ must be a vector
- 像程序员一样思考——程序员的四个境界
- 计算机考研之中南大学PK东南大学
热门文章
- IIS中ftp设置指定的用户登录(三)
- 电子商务较传统商务活动的比较
- SDN和SD-WAN的概念别再搞混了—Vecloud微云
- Coding4Fun.Controls的ToastPrompt小用
- 关于论文《ISTA-Net》的研究心得
- POSIX.1各头文件简单说明
- 2017 年实验班选拔试题
- 【华为OD机试 2023】货币单位换算(C++ Java JavaScript Python)
- html div 不规则形状,div css布局,非html css布局
- halcon 相似度_列举一些算法对照片、图像进行相似度对比分析比较