目录

一、判断题

二、选择题


在开始之前,先为大家推荐两篇介绍该章两个主要算法的的文章,供大家参考。

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次。

上面的题目均是博主在期末考试前总结的重难点,欢迎各位大佬指正错误或者给出更优质的解析。

算法与数据结构 第四章 字符串(详解)相关推荐

  1. JavaWeb --第四章Maven详解

    JavaWeb --第四章Maven详解 文章目录 Maven Maven架构管理工具 下载安装Maven 配置环境变量 阿里云镜像 本地仓库 在IDEA中使用Maven 创建一个普通的Maven项目 ...

  2. 算法与数据结构 第四章 树与二叉树

    第四章树 一.选择题(20分) 1.在下述结论中,正确的是: (    ) ① 只有2个结点的树的度为1: ② 二叉树的度为2: ③ 二叉树的左右子树可任意交换: ④ 在最大堆(大顶堆)中,从根到任意 ...

  3. 数据结构第四章字符串MOOC整理

    1.若串S1='ABCDEFG', S2='9898' ,S3='###',S4='012345',执行 concat(replace(S1,substr(S1,length(S2),length(S ...

  4. 第十四章:详解Jenkins节点配置

    2014-03-02:修正对于lable标签的理解.(1.532.1版本已经给出了官方解释) 2013-12-22:添加JNLP端口修改,修改了一些错误. Jenkins有个很强大的功能:分布式构建( ...

  5. AcWing提高算法课Level-3 第四章 高级数据结构

    AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...

  6. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  7. 判断字符串格式_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  8. 《算法笔记》第四章笔记

    <算法笔记>第四章 排序 排序算法的思想都比较简单,而且c++可以直接用sort函数进行排序,一般不会直接写排序代码 归根到底就是每轮处理一个数据,n个数据只需处理n-1次即可变得有序 选 ...

  9. 数据结构实验四 :字符串和多维数组

    数据结构实验四 :字符串和多维数组 本次实验内容: 1.从键盘输入一些文本,统计文本单词的个数. 2.写程序输出一个5阶幻方:每一行每一列每一个对角线和均相等. 3.自己设计一个字符加密算法,并设计程 ...

最新文章

  1. echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
  2. php foreach next,foreach next 操作数组指针移动问题,多个数连加,连除,连减,连乘php版本...
  3. JVM基于栈的解释器执行原理
  4. 雾霾模糊?图像增强教你如何去雾
  5. nginx 实现负载均衡
  6. win10无法装载iso文件_教你用win10自带虚拟光驱打开iso镜像文件的方法
  7. MFC动态修改Static Text控件caption
  8. 智能交通领域权威期刊会议
  9. Git检查现有 SSH 密钥
  10. 白话CMPP、SGIP
  11. 微信小程序——简单饮食推荐(四)
  12. OLTP与OLAP理解
  13. nuxt 设置路由的meta属性,nuxt 怎么设置路由的meta,nuxt 怎么设置router的meta
  14. 在线订舱物流详情 广州力其
  15. 文字底部或者中间 加横线
  16. Windows系统批量修改文件后缀名/扩展名
  17. 华工2018计算机网络随堂练习,计算机网络随堂练习-华工2019随堂练习
  18. 「 MalabSimulink 」X0 returned by MATLAB S-function ‘NLSEF‘ in ‘ADRC_NN/S-Function1‘ must be a vector
  19. 像程序员一样思考——程序员的四个境界
  20. 计算机考研之中南大学PK东南大学

热门文章

  1. IIS中ftp设置指定的用户登录(三)
  2. 电子商务较传统商务活动的比较
  3. SDN和SD-WAN的概念别再搞混了—Vecloud微云
  4. Coding4Fun.Controls的ToastPrompt小用
  5. 关于论文《ISTA-Net》的研究心得
  6. POSIX.1各头文件简单说明
  7. 2017 年实验班选拔试题
  8. 【华为OD机试 2023】货币单位换算(C++ Java JavaScript Python)
  9. html div 不规则形状,div css布局,非html css布局
  10. halcon 相似度_列举一些算法对照片、图像进行相似度对比分析比较