xtu oj 连接字符串

文章目录

  • 回顾
  • 思路
  • 代码

回顾

  • A+B III
  • 问题 H: 三角数
  • 问题 G: 3个数
  • 等式 数组下标查询,降低时间复杂度
  • 1405 问题 E: 世界杯
  • xtu 数码串
  • xtu oj 神经网络
  • xtu oj 1167 逆序数(大数据)
  • xtu oj 原根
  • xtu oj 不定方程的正整数解
  • xtu oj 最多的可变换字符串
  • xtu oj String I
  • xtu oj 字母序列
  • xtu oj 分段
  • xtu oj 完全平方数II

思路

  • 这个首先就要注意输入的时候要加上 !=EOF
  • 然后就是要找两个字符串的最长的公共子序列,要求是一个是在前面字符串的后面,另一个在后面字符串的前面,找到最长的重合的部分,然后把两个字符串拼接起来就是答案,最短的时候是两个字符串完全相等,就输出 a 字符串就好,最长的就是完全不等,就直接把两个字符串连接起来。
  • 输入两个字符串, !=EOF 怎么加?
  • 最大是两百,所以哪怕是 n^2 的时间复杂度也是可以接受的,所以应该直接暴力就行了。好像不是 n^2 ,而是 n^3 ,那就是 8*10^6 ,这个时间复杂度也是可以接受的。
  • 题目好像没说两个字符串的长度是相等的,所以要用两个长度变量来分别表示字符串长度。
  • 假设把前面字符串叫做 jjj ,后面字符串叫做 ttt ,一定要是 jjj 的后面的完整一块等于 ttt 的前面的完整一块。也就是说遍历的时候,一定要从开始相等的第一个字母开始,到 jjj 的最后一个元素,中间不能出现不相等的元素,在这个前提下,找一个 jjj 里面下标最小的元素,就好。(原来我最开始想到了这个,但是在代码里面没加这个判断,后面过不了才找到这个错误,感觉完全是运气,所以最好整理思路的时候把条件列出来,写代码的时候把条件限制得严格一些)
  • 观察最后一个样例可以发现,两个字符串可以交换,也就是满足题目里面说的字典序的问题。字典序最小,这个时候等于说有两个条件,一个条件是拼接之后最短,另一个条件是字典序最小。那么我们可以写一个函数,实现两个字符串拼接之后最短,用两个数组存答案,等于说实现的这个函数的参数是两个字符串,这两个字符串先后顺序不一样,就会有不一样的答案,比较答案的长度,输出答案短的,长度相等就输出字典序小的。
  • 比较字典序就是比较每一个字母的大小,反正是存到了数组里面,还是比较容易比较的,字符串拼接函数的一些参数我不是很熟悉,现在查一下。不然只能用数组模拟了。strncat 好像只能拼接字符串前面 n 个字符,所以假设我想从中间开始拼接,还是只能自己模拟一下。
  • 比较两个字符串字典序可以直接用 strcmp 函数,strcmp(ans1,ans2) ,小于零表示 ans1 更小,但是这个函数不能直接比较两个字符串的长度,只能一个一个字母去比较,所以通俗地说,就是比较字典序的一个函数。
    在这里插入图片描述
    哈哈哈,有点难写,有一些细节需要注意。
  • 最后总结一下:这题思路比较直观,找公共的元素,代码细节比较多,一个是要求输出字典序小的,第二是前面字符串要枚举完最后一个元素才算满足条件,第三是两个字符串可能完全没有公共部分,需要特判。

代码

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#define N 410char jjj[N];//分别存两个字符串
char ttt[N];char ans1[N];//存不同字典序的答案
char ans2[N];
void get_ans(char arr1[],char arr2[],char ans[]){int len1=strlen(arr1),len2=strlen(arr2);//字符串长度bool has_found=false;//特判两个字符串没有满足条件的部分,比如这种,abc,def 这种for(int i=0;i<len1;i++){//从第一个字符串前面开始枚举bool is_ok=true;int max_ans=0;//最多的相同的元素的个数bool arr1_out=false;//第一个字符串数组没有枚举到最后一个元素,我们要求第一个字符串数组枚举到了最后一个元素for(int j=i,k=0;j<len1&&k<len2;j++,k++){//注意这里的 j 和 k 是同步变化的if(j==len1-1){//假设能枚举完第一个字符串的最后一个元素,就说明满足条件arr1_out=true;}if(arr1[j]==arr2[k]){max_ans++;}else{//只要在枚举过程中出现一个不相等的元素,就结束枚举is_ok=false;break;}}if(is_ok&&arr1_out){//因为从前面开始找的,所以找到的第一个满足条件的就是最大的公共部分,就是答案strcpy(ans,arr1);//把字符串拼接好存到答案数组里面for(int hhh=len1,j=max_ans;j<len2;hhh++,j++){ans[hhh]=arr2[j];}has_found=true;break;}}if(has_found==false){//特判没有啥共同元素的情况,abc,def  这种情况strcpy(ans,arr1);//把 arr1 和 arr2 拼接起来复制到 ans 答案数组里面strcat(ans,arr2);}
}int main(){while(scanf("%s%s",jjj,ttt)!=EOF){//多样例输入get_ans(jjj,ttt,ans1);//得到两个答案数组get_ans(ttt,jjj,ans2);if(strlen(ans1)<strlen(ans2)){//比较长度printf("%s\n",ans1);}else if(strlen(ans1)>strlen(ans2)){printf("%s\n",ans2);}else{if(strcmp(ans1,ans2)<=0){//比较字典序printf("%s\n",ans1);}else{printf("%s\n",ans2);}}for(int i=0;i<N;i++){//清空数组ans1[i]='\0',ans2[i]='\0';}}return 0;
}

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

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

相关文章

gradle的安装及其配置

1、下载网址 Gradle | Releases 2、 3、配置环境变量 4、 5、cmd输入gradle-v查看版本

数据结构与算法基础总结

为什么学习数据结构与算法&#xff1f; 关于数据结构和算法&#xff0c;以前只是看过一些零散的文章或者介绍&#xff0c;从来都没有系统的去学习过。随着工作之余&#xff0c;看了几本书&#xff0c;读了一些高质量的专栏&#xff0c;也接触了一些有关梦想的故事&#xff0c;发…

使用Docker Swarm进行集群管理

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Swarm进行集群管理 引言 Docker Swarm 简介 安装 Docker Ubuntu CentOS 初始化 Swarm 集群 加入 Worker 节点 验证集…

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…

ssm+jsp662教务信息平台的设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

LDA 线性分类

线性判别分析是一种经典的线性分类方法&#xff0c;将高维空间投射到低维空间&#xff0c;如下图。 LDA 的目标就是简单累内距离变小&#xff0c;把类间的距离变大&#xff0c;这样就可以把相似的数据聚集在一起。 u1 和 u2 类间距离&#xff0c;S1、S2 为类内数据点之间的距…

智能离线语音识别不灵敏?如何改善和提升识别率?

前言 有用户反馈离线语音识别不灵敏&#xff0c;跟着笔者一起分析原因吧。笔者知识能力有限&#xff0c;难免会误&#xff0c;还请大家批评指正。 1 影响离线语音识别的因素 笔者分析离线语音识别不灵敏的原因有以下几点 1.1 运行硬件的算力限制 由于离线语音识别在本地MCU…

贪心算法---java---黑马

贪心算法 1)Greedy algorithm 称之为贪心算法或者贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则&#xff0c;选取当前最优解因为未考虑所有可能&#xff0c;局部最优的堆叠不一定得到最终解最优 贪心算法例子 Dijkstra while …

使用Docker Compose搭建多服务应用

使用Docker Compose搭建多服务应用 Docker Compose简介 安装Docker Compose 在Linux上安装Docker Compose 在macOS上安装Docker Compose 在Windows上安装Docker Compose 创建项目结构 Flask应用 安装依赖 Dockerfile 配置Docker Compose 构建和运行应用 访问应用 高级配置 环…

【教程】Git 标准工作流

前言 Git 是日常开发中常用的版本控制工具&#xff0c;配合代码托管仓库&#xff08;如&#xff0c;Github&#xff0c;GitLab&#xff0c;Gitee 等&#xff09;用来实现多人多版本的协作开发。 但是 Git 的命令纷繁复杂&#xff0c;多如累卵&#xff0c;不可能也不需要全部搞…

Vue 3 Vite 项目打包优化:自动删除指定文件的方法

程序员必备宝典https://tmxkj.top/#/ 在 Vue 3 项目中&#xff0c;如果你需要在打包之前删除指定的文件&#xff0c;可以使用 Node.js 的 fs 模块来实现。这可以通过在 vue.config.js 文件中配置一个自定义的 Webpack 插件来完成。 1.安装必要的依赖&#xff08;如果还没…

前端通过nginx部署一个本地服务的方法

前端通过nginx部署一个本地服务的方法&#xff1a; 1.下载ngnix nginx 下载完成后解压缩后运行nginx.exe文件 2.打包你的前端项目文件 yarn build 把生成的dist文件复制出来&#xff0c;替换到nginx的html文件下 3.配置conf目录的nginx.conf文件 主要配置server监听 ser…

【网络面试篇】TCP与UDP类

目录 一、综述 1. TCP与UDP的概念 2. 特点 3. 区别 4. 对应的使用场景 二、补充 1. 基础概念 &#xff08;1&#xff09;面向连接 &#xff08;2&#xff09;可靠的 &#xff08;3&#xff09;字节流 2. 相关问题 &#xff08;1&#xff09;TCP 和 UDP 可以同时绑定…

【触想智能】工业平板电脑在智能教育设备上的应用优势分析

随着科技的快速发展&#xff0c;智能教育设备成为现代教育领域的新宠。其中&#xff0c;工业平板电脑作为一种重要的智能教育设备&#xff0c;正逐渐在教育领域得到广泛应用。 工业平板电脑在智能教育设备上的应用具有以下几个优势。 1、工业平板电脑具备便携性。相比传统的教学…

java项目之协力服装厂服装生产管理系统的设计与实现(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的协力服装厂服装生产管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; …

C语言之写一个修改数组内容的函数

问题代码: 函数ltrim是为了消除buf字符数组中左边空格&#xff0c; memmove函数介绍 如果对c语言指针运用非常熟练的人,结合函数功能就会发现这个代码非常的傻逼&#xff0c;你会发现为什么需要返回&#xff0c;buf不用接收返回值&#xff0c;执行这个函数后buf中的内容就已经…

基于SSM+VUE宠物医院后台管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

Cisco Packet Tracer 8.0 路由器静态路由配置

文章目录 静态路由简介一、定义与特点二、配置与命令三、优点与缺点四、应用场景 一&#xff0c;搭建拓扑图二&#xff0c;配置pc IP地址三&#xff0c;pc0 ping pc1 timeout四&#xff0c;配置路由器Router0五&#xff0c;配置路由器Router1六&#xff0c;测试 静态路由简介 …

MPSK(BPSK/QPSK/8PSK)调制解调的Matlab仿真全套

一、概述 MPSK(BPSK、QPSK、8PSK)等是常用的相位调制方式,本文对数据获取、比特流组织、基带调制、上变频发送、添加噪声、接收下变频、基带解调、数据还原等过程进行仿真。 模块化、通用化设计,将函数分为(1)数据读取转比特流;(2)基带调制【参数控制调制类型】;(…

Python-创建并调用自定义文件中的模块/函数

背景&#xff1a;在Python编程中&#xff0c;我们常常需要创建自己的专属文件&#xff0c;以便帮助我们更高效&#xff0c;快捷地完成任务。那么在Python中我们怎么创建并调用自己文件中的模块/函数呢? 在Python中调用自定义文件&#xff0c;通常是指调用自己编写的Python模块…