北京化工大学数据结构2022/10/13作业 题解

news/2024/5/9 9:31:52/文章来源:https://blog.csdn.net/m0_61735576/article/details/127338017

 

目录

问题 A: 字符串变换

问题 B: 字符串求反

问题 C: 字符串转化为整数(附加代码模式)

问题 D: 字符串匹配(朴素算法)-附加代码模式

问题 E: 求解最长首尾公共子串-附加代码模式

问题 F: 算法4-7:KMP算法中的模式串移动数组-附加代码模式

问题 G: 数据结构作业03 -- 改进的nextVal向量

问题 H: 算法4-6:字符串匹配算法执行次数比较(朴素、KMP、改进的KMP)-附加代码模式


问题 A: 字符串变换

依据题意,只可以在末尾增加或删除

所以如果ab串长度不相等,要先用|m-n|步将两字符串补齐

当然,补的那部分天然相等

所以在改这步中,我们只需要比较m,n短的那个,每个不同加一步即可

signed main(){int m,n;cin>>m>>n;string a,b;cin>>a>>b;int t=0;t+=fabs(m-n);for(int i=0;i<min(m,n);i++)if(a[i]!=b[i])t++;cout<<t;return 0;
}

问题 B: 字符串求反

这。。。。应该没啥好说的

signed main(){string a;cin>>a;reverse(a.begin(),a.end());cout<<a.size()<<'\n'<<a;
}

问题 C: 字符串转化为整数(附加代码模式)

从后往前遍历即可

k代表当前这个数后面有几个0

int str2int(const char a[],int &data){int m=strlen(a);data=0; int k=1;for(int i=m-1;i>=0;i--){if(a[i]>='0'&& a[i]<='9'){int now=(a[i]-'0')*k;data+=now;k=k*10;}else{return 1;}}return 0;   
}

问题 D: 字符串匹配(朴素算法)-附加代码模式

朴素算法,每一位匹配一遍即可,匹配成功就返回当前位置

代码如下

#define max 1000000
int findPos(char s[], char t[]){int m=strlen(s);int n=strlen(t);if(m<n){return -1;}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(s[i+j]!=t[j]){break;}if(j==n-1){return i;}}}return -1;
}

问题 E: 求解最长首尾公共子串-附加代码模式

最长首位公共子串是什么?

首先前缀子串和后缀子串大家应该都不陌生

比如abacab这个串

a,ab,aba,abac,abaca这叫前缀

b,ab,cab,acab,bacab这叫后缀

最长首位公共子串就是在等于前缀的后缀中最长的那个

很显然是ab

 那么如何求这个最长首尾公共子串呢

我们只需要两个指针,j去找匹配的后缀

k与j比对找与之匹配的前缀

如果j,k相等,那么j,k都往后走一步

如果j走到了末尾,那么很显然此时k就是答案

如果还没走到末尾就断了,那么k就要退回到ne[k]

代码如下

int ne[100000];
#define max 1000000
int calcLCT(char t[]){int n=strlen(t);if(n==1){return -1;}ne[0]=-1;int k=ne[0];int j=0;while(j<n){if(k==-1||t[j]==t[k]){j++;k++;ne[j]=k;}else{k=ne[k];}}return ne[n];
}

问题 F: 算法4-7:KMP算法中的模式串移动数组-附加代码模式

算法同上

毕竟next数组的本质就是当前匹配到的最长前后公共子串

#define max 1000000
void getNext(char t[], int ne[]){int k=-1;ne[0]=-1;int len=strlen(t);int j=0;while (j<len-1){if (k==-1||t[k]==t[j]){k++;j++;ne[j]=k;}else{k = ne[k];}}
}

问题 G: 数据结构作业03 -- 改进的nextVal向量

原next数组的问题:

 也就是说,如果按原next回溯,回溯到的值与目前的值一样,那不白回溯了吗

原来就是因为C和B不相等才回溯的,你回溯完之后还是B,那不照样不相等吗

所以我们就要预处理一下nextval,如果回溯的值相等,那我们就要再往深层回溯

直至回溯之后与当前不相等

nextval与原next的关系:

如果位置k的元素与next[k]元素相同时,nextval[k]=nextval[next[k]]

如果位置k的元素与next[k]元素不同时,nextval[k]= next[k]

代码如下: 

using namespace std;
void CalcNextVal(char p[],int ne[])
{int i=0;int j=-1;ne[i]=j;int len=strlen(p);while(i<len){if(j==-1||p[i]==p[j]){i++;j++;if(p[i]==p[j]){ne[i]=ne[j];}else{ne[i]=j;}}else{j=ne[j];}}
}
char s[1000000];
int ne[1000000];
signed main()
{while(cin>>s){CalcNextVal(s,ne);int len2=strlen(s);fer(i,0,len2-1){cout<<ne[i]<<" ";}cout<<'\n';}
}

问题 H: 算法4-6:字符串匹配算法执行次数比较(朴素、KMP、改进的KMP)-附加代码模式

这题基本是以上代码的结合体

又是一道码农题

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define max 1000000
#define fer(i,a,b) for(int i=a;i<=b;++i)
#define der(i,a,b) for(int i=a;i>=b;--i)
int findPos(char S[], char T[]){int res=0;int lens=strlen(S);int lent=strlen(T);int i=0,j=0;while(i<lens&&j<lent){res++;if(S[i]==T[j]){i++;j++;}else{i-=j-1;j=0;}}cout<<"count in findPos is:"<<res<<endl;if(j>=lent){return i-j;}else{return -1;}
}
void CalcNext(char T[],int ne[]){int i=0,k=-1;ne[0]=-1;while(i<strlen(T)) {if (k==-1||T[i]==T[k]) {i++;k++;ne[i]=k;}else{k=ne[k];}}
}
void CalcNextVal(char T[],int ne[],int neVal[]){int l=strlen(T);fer(i,0,l-1){neVal[i]=ne[i];}fer(i,0,l-1){int k=ne[i];if(T[i]==T[k]){neVal[i]=neVal[k];}}
}
int findPos_kmp(char S[], char T[], int ne[]){int res=0;int lens=strlen(S);int lent=strlen(T);int i=0,j=0;while(i<lens&&j<lent){res++;if(S[i]==T[j]||j==-1){i++;j++;}else{j=ne[j];}}cout<<"count in findPos_kmp is:"<<res<<endl;if(j>=lent){return i-lent;}else{return -1;}
}

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

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

相关文章

AR 配置并导出IOS开发环境配置

文章目录前言一、导入插件二、设置开发环境三、搭建基础框架四、代码五、导出六、测试总结前言 最近接了公司的一个AR项目&#xff0c;需要用MacBook&#xff0c;所以赶鸭子上架&#xff0c;现学…小本本记下来 我用的unity是2020.3.15f2c1, MacBook是 2020MacBook M1, ipad是…

Azkaban(三):进阶案例-java作业类型案例、条件工作流案例、定时执行案例

目录 Javaprocess作业类型案例 条件工作流案例 运行时参数案例 预定义宏案例 定时执行案例 Javaprocess作业类型案例 Javaprocess类型可以运行一个自定义主类方法&#xff0c;type类型为javaprocess。 1.创建maven工程&#xff0c;创建类名&#xff0c;创建AzkabanCase类…

ISP图像信号处理 | GAMES204-计算成像

图像信号处理 | GAMES204-计算成像Dead Pixel CorrectionBlack Level CompensationAnti-aliasingLens Shading CorrectionNoise Reduction3ASAuto-exposureAuto FocusAWBDemosaic&#xff1a;CFA InterpolationColor CorrectionEdge EnhancementFalse Color SuppressionBrightn…

运动用品品牌排行榜,双十一运动装备选购清单

运动需要我们坚定的决心与毅力&#xff0c;因为它也是一个枯燥而艰辛的过程&#xff0c;需要无数汗水的挥洒与不断重复的坚持。为了让自己能更坚持下去运动&#xff0c;我一般都会选择用外在运动装备来辅助锻炼&#xff0c;不仅仅能提高运动效率&#xff0c;还能让运动更加快乐…

移动端自动化任务-AutoJs Pro v9使用教程(一)

官网 - Auto.js Pro Github代码示例 教程与博客 (autojs.org) 开源版文档 Pro 版 API 旧文档 Pro 版 v9新文档 一、前言 本教程是本人学习 Auto.js Pro V9 的记录&#xff0c;算是个入门教程&#xff0c;通过本文可帮你快速了解 autojs 的大体用法和开发步骤。官方文档也有中文…

【qml】QQuickPaintedItem作为代理在ListView中使用

文章目录1.说明2.程序截图3.TextBalloon 类3.1 TextBalloon.h3.2 TextBalloon.cpp3.3 textballoons.qml3.4 main.cpp1.说明 QQuickPaintedItem类提供了一种在QML场景图中使用QPainter API的方法。 QQuickPaintedItem本身作为Item&#xff0c;也可以在ListView中作为代理使用。…

机器学习笔记 - sklearn决策树(kaggle 实战 Titanic 入门)

Kaggle - Titanic 前言 这是 Kaggle 上非常典型的一道入门题&#xff0c;可以用很多机器学习或者深度学习甚至是一些“奇淫技巧”的方法来解决。因为我是一个初学者&#xff0c;所以我希望在尽可能提高正确率的情况下&#xff0c;用更简单的方法。如果这也能帮助到你&#xf…

数据库作业一

MySQL数据库 MySQL官方提供了两个不同的版本&#xff1a; 1、社区版 &#xff08;MySQL Commimity Server&#xff09;免费&#xff0c;MySQL不提供任何技术支持&#xff08;本文操作选用社区版&#xff09; 2、商业版&#xff08;MySQL Enterprise Edition&#xff09;收费&a…

[Microsoft] 通过Microsoft Spotlight 中国站云技能挑战获取微软免费考试券

这是一篇关于微软Spotlight 推出学习活动的同时&#xff0c;如何获得免费考试券的方法&#xff0c;如果该文章在未来时间已经失效&#xff0c;那么建议你关注一下这个博客&#xff0c;有Azure China Cloud最新的消息会进行更新通知。 文章目录1. 所需准备注册账号2. 参加 Micro…

二十八、Hive集成HBase分析搜索引擎用户行为数据

我们已经知道,HBase数据库没有类SQL的查询方式,因此在实际的业务中操作和计算数据非常不方便。而Hive支持标准的SQL语法(HiveQL),若将Hive与HBase集成,则可以通过HiveQL直接对HBase的表进行读写操作,让HBase支持JOIN、GROUP等SQL查询语法,完成复杂的数据分析。甚至可以…

【电源设计】13开关电源仿真与应用

0.前言 本章主要是大概了解一下开关电源仿真与应用&#xff0c;开关电源仿真设计全过程&#xff1a;包括需求分析/控制/PWM。因为本人并不是专门做电源的&#xff0c;此部分内容仅作了解&#xff0c;并不专门去学习。 文章目录0.前言1.项目需求2.方案介绍2.1DCDC级&#xff08…

互联网重提内容为王?学Netflix(奈飞)做好内容营销

Netflix 成立于1997年&#xff0c;不久便一跃成为最受瞩目的流媒体服务网站。它为什么能在短短时间内获得如此巨大的成功呢&#xff1f;答案就在于它使用的超凡 内容营销策略 和方法 —— 数据驱动 、优化内容、以流量转化为目标。 内容为王众人皆知&#xff0c;内容营销是品牌…

【计算机毕业设计】java ssm高校计算机网络考试系统(源码+论文)

提供了一些今年最新计算机毕业设计源代码、文档及帮助指导&#xff0c;公众号&#xff1a;一点毕设&#xff0c;领取更多毕设资料。 随着计算机以及网络在教学领域的高速发展&#xff0c;为了加快数字化校园的进程&#xff0c;更好的实现现代化的教育改革&#xff0c;针对于当下…

手动制作满足SARscape要求的_dem数据

手动制作满足SARscape要求的_dem数据问题描述1 下载研究区的原始DEM数据&#xff0c;在envi中镶嵌裁剪&#xff0c;得到.dat格式的数据&#xff0c;然后用envi中的Original ENVI工具把.dat转成_dem1.1 下载研究区的原始DEM数据1.2 将.tif数据转成envi格式的.dat2. 能不能直接将…

WordPress开发中常用代码(必备)

很多人在WordPress开发中常用代码&#xff0c;WordPress 相比其它网站程序&#xff0c;最突出的优势&#xff1a;主题模板多&#xff0c;插件多&#xff0c;相关技术文章多&#xff0c;只要你想到的功能&#xff0c;都可以通过插件或者代码实现。现在分享下WordPress常用代码&a…

组合关系比依赖关系耦合性更强

首先说明&#xff0c;在这里我把“关联”、“组合”、“聚合”关系都统一当做“组合”关系来说的&#xff0c;但实际上聚合&#xff08;has-a&#xff09;是关联的一种&#xff0c;组合&#xff08;cntains-a&#xff09;也是关联的一种。如果想要知道三者之间的区别&#xff0…

实验二.常用网络命令

常用网络命令一、实验目的与要求学习常用网络命令的使用方法熟悉主机的基本网络配置 二、预习与准备网络常用命令及基本用法。主机的基本网络配置信息。 三、 实验内容 1.Ping命令 2.ipconfig命令 3.arp命令&#xff08;地址转换协议&#xff09; 4.traceroute命令 5.route命令…

花咲の姫君(異時層ツキハ) / 花咲(异时层妖刀)

目录基本资料面板值&#xff08;无天冥加成&#xff09;天冥奖励战斗宣言&#xff08;VC&#xff09;被动效果Another Sense技能珠子回到人物索引 基本资料 NS(5★)卡池 (Ver 2.13.50)ミヤビノカミの典録 天冥属性武器防具属性耐性异常耐性NS天火枪护腕风30%10%个性枪、东方、…

目标检测SSD学习笔记

目标检测SSD学习笔记 SSD: Single Shot MultiBox Detector Abstract. 我们提出了一种使用单一深度神经网络来检测图像中的对象的方法。我们的方法&#xff0c;命名为SSD&#xff0c;将边界框的输出空间离散化为一组默认框&#xff0c;每个特征地图位置具有不同的纵横比和比例…

BasicSR入门教程

BasicSR入门教程 1.安装环境 由于安装好的其他环境已经有了pytorch&#xff0c;那么新建环境时直接拷贝该环境就好 //复制环境 conda create --name my-basicsr --clone mmediting克隆项目 git clone https://github.com/XPixelGroup/BasicSR.git安装依赖包 cd BasicSR pi…