华为OD机试 - 字符串化繁为简(Java 2024 C卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
      • 示例:
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给定一个输入字符串,字符串只可能由英文字母 (‘a’‘z’、‘A’‘Z’ )和左右小括号 (‘(’、‘)’)组成。当字符里存在小括号时,小括号是成对的,可以有一个或多个小括号对,小括号对不会嵌套,小括号对内可以包含1个或多个英文字母,也可以不包含英文字母。当小括号对内包含多个英文字母时,这些字母之间是相互等效的关系,而且等效关系可以在不同的小括号对之间传递,即当存在’a’和’b’等效和存在’b’和’c’ 等效时,‘a’ 和 ‘c’ 也等效,另外,同一个英文字母的大写字母和小写字母也相互等效 (即使它们分布在不同的括号对里)。

需要对这个输入字符串做简化,输出一个新的字符串,输出字符串里只需保留输入字符串里的没有被小括号对包含的字符(按照输入字符串里的字符顺序) ,并将每个字符替换为在小括号对里包含且字典序最小的等效字符。
如果简化后的字符串为空,请输出为"0"。

示例:

输入字符串为"never(dont)give(run)up(f)()“,初始等效字符集合为(‘d’,‘o’,‘n’,‘t’)、(‘r’,‘u’,‘n’),由于等效关系可以传递,因此最终等效字符集合为(‘d’,‘o’,‘n’,‘t’,‘r’,‘u’),将输入字符串里的剩余部分按字典序最小的等效字符替换后得到"devedgivedp”。

二、输入描述

输入为 1 行,代表输入字符串。

三、输出描述

输出为 1 行,代表输出字符串。

1、输入

(abd)demand(fb)for

2、输出

aemanaaor

3、说明

等效字符集为(‘a’,‘b’,‘d’,‘f’),输入字符串里没有被小括号包含的子字符串集合为 “demandfor”,将其中字符替换为字典序最小的等效字符后输出为:“aemanaaor”。

四、解题思路

  1. 遍历输入字符串;
  2. 判断字符:
    • 如果是(,表示括号内字符开始标识符;
    • 如果是),括号内字符结束标识符;
    • 如果不是(),判断其是否是括号内字符;
      • 如果是括号内字符,放入括号内字符数组bracketsArr;
      • 否则放入非括号内字符builder;
  3. 遍历括号内字符数组bracketsArr,获取字典序最小的等效字符;
    • 如果未取到字典表最小的灯效字符;
    • 按字典表从小到大排序后,如果括号内数组不为空,则为字典序最小的等效字符;
    • 如果取到字典表最小的灯效字符,则将不是最小的等效字符替换为最小的等效字符;
  4. 每个字符替换为在小括号对里包含且字典序最小的等效字符;
  5. 输出替换后的字符串。

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();// 是否是括号内字符boolean inBracketsFlag = false;// 非括号内字符StringBuilder builder = new StringBuilder();// 括号内字符,放入数组,方便排序char[] bracketsArr = new char[input.length()];for (int i = 0; i < input.length(); i++) {char c = input.charAt(i);if(c == '('){// 括号内字符开始标识符inBracketsFlag = true;continue;}else if(c == ')'){// 括号内字符结束标识符inBracketsFlag = false;continue;}else {if(inBracketsFlag){// 括号内字符bracketsArr[i] = c;}else {// 非括号内字符builder.append(c);}}}/*** key:括号内非字典序最小的等效字符* value:括号内字典序最小的等效字符*/Map<Character,Character> map = new HashMap<>();// 获取字典序最小的等效字符Arrays.sort(bracketsArr);// 字典序最小的等效字符char minChar = '\u0000';for (int i = 0; i < bracketsArr.length; i++) {// 如果未取到字典表最小的灯效字符if(minChar == '\u0000'){// 按字典表从小到大排序后,如果括号内数组不为空,则为字典序最小的等效字符if(bracketsArr[i] != '\u0000'){minChar = bracketsArr[i];continue;}}else {// 如果取到字典表最小的灯效字符,则将不是最小的等效字符替换为最小的等效字符map.put(bracketsArr[i],minChar);}}// 每个字符替换为在小括号对里包含且字典序最小的等效字符StringBuilder resultBuilder = new StringBuilder();for (int i = 0; i < builder.length(); i++) {char c = builder.charAt(i);if(map.containsKey(c)){resultBuilder.append(map.get(c));}else{resultBuilder.append(c);}}System.out.println(resultBuilder);
}

六、效果展示

1、输入

()happy(xyz)new(wxy)year(tT)

2、输出

happTneTTear

3、说明

  1. 获取括号内字符:xyzwxytT —> xyzwT
  2. 获取字典序最小的等效字符T;
  3. 拼接非括号内字符:happynewyear;
  4. 将非括号内每个字符替换为在小括号对里包含且字典序最小的等效字符:happTneTTear

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

2024蓝桥杯每日一题(区间合并)

一、第一题&#xff1a;挤牛奶 解题思路&#xff1a;区间合并 区间合并模板题 【Python程序代码】 n int(input()) a [] for i in range(n):l,r map(int,input().split())a.append([l,r]) def cmp(x):return x[0],x[1] a.sort(keycmp) res1,res20,0 st,ed a[0][0…

visualization_msgs::Marker 的pose设置,map坐标系的3d box显示问题

3D框显示 3D框显示可以使用visualization_msgs::Marker::LINE_LIST或者LINE_STRIP&#xff0c;前者使用方法需要指明线的两个端点&#xff0c;后者自动连接相邻两个点。 姿态问题 网上看了一些&#xff0c;没有涉及到朝向设置&#xff0c;Pose.orientation默认构造为4个0 至…

Python环境下一维时间序列的小波尺度谱和时间平均小波谱(基于Morlet小波)

小波分析是较好的非平稳信号分析方法之一&#xff0c;它通过伸缩和平移运算对信号进行多尺度细化分析&#xff0c;能够在不同的尺度上描述信号的局部特征&#xff0c;为微弱故障特征信号的检测提供了有效的工具。小波尺度谱可看作一个有恒定相对带宽的谱图&#xff0c;能够反映…

Java剖析 : HashMap底层存储数据的结构 | HashSet添加不重复元素底层原理

HashSet底层剖析 前言&#xff1a; 我们知道Set中所存储的元素是不重复的&#xff0c;那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢&#xff1f; ★ HashSet在添加元素时&#xff0c;是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c…

OpenAI:ChatGPT API 文档之 Embedding

在自然语言处理和机器学习领域&#xff0c;"embeddings" 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称为嵌入空间&#xff08;embedding space&#xff09;&#xff0c;而生成的向量则称为嵌入向量&#xff08;embedding vector&#xff0…

14---DVI电路设计

视频链接 DVI硬件电路设计01_哔哩哔哩_bilibili DVI电路设计 1、DVI的简介 DVI(Digital Visual Interface)&#xff0c;即数字视频接口。它是1998年9月&#xff0c;在Intel开发者论坛上成立的&#xff0c;由Silicon Image、Intel(英特尔)、Compaq(康柏)、IBM(国际商业机器公…

时序数据库:TDengine整体架构

文章目录 [toc]一、集群与基本逻辑单元1.主要逻辑单元2.节点之间的通讯3.一个典型的消息流程 二、存储模型与数据分区、分片1.存储模型2.数据分片3.数据分区4.负载均衡 三、数据写入与复制流程1.Master Vnode 写入流程2.Slave Vnode 写入流程3.主从选择4.同步复制 四、缓存与持…

五 超级数据查看器 讲解稿 列表功能2

五 超级数据查看器 讲解稿 列表功能2 点击此处 以新页面 打开B站 播放教学视频 点此下载 百度手机助手 下载地址4 讲解稿全文&#xff1a; 大家好&#xff0c;今天我们讲解一下&#xff0c;超级数据查看器列表界面&#xff0c;分为1-2两集。这是第二集 继续讲解弹出式菜单…

Linux环境(Ubuntu)上的防火墙工具使用方法

目录 概述 1 防火墙工具&#xff08;ufw&#xff09; 1.1 安装防火墙工具&#xff1a; 1.2 操作防火墙相关命令 2 ufw操作命令的范例 2.1 打开/关闭防火墙 2.1.1 打开防火墙 2.1.2 关闭防火墙 2.1.3 查询当前防火墙状态 2.1.4 允许选择的端口访问 2.1.5 允许选择固定…

【数据结构】线性表的定义及基本操作

文章目录 前言线性表的定义线性表的基本操作基本操作其他常用操作 总结 前言 数据结构的三要素是逻辑结构、数据的运算、存储结构&#xff08;物理结构&#xff09;&#xff0c;存储结构不同&#xff0c;运算的实现方式也不同。 本次文章包括线性表的定义和基本操作&#xff0…

java零基础入门-map(上)

一、教学目标 掌握何为map能够说出map集合的特点。能够使用map集合添加元素、删除元素等伴生方法。 二、正文 1、概述 说起map&#xff0c;想必大家并不陌生吧。之前我在讲Collection集合的时候&#xff0c;我是给大家提过一嘴&#xff0c;我说Collection集合被称为单列集合…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的人群密度检测系统(深度学习模型+UI界面+训练数据集)

摘要&#xff1a;开发人群密度检测系统对于公共安全等领域具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个人群密度检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型…

07-java基础-锁之AQSReentrantLockBlockingQueueCountDownLatchSemapho

文章目录 0&#xff1a;AQS简介-常见面试题AQS具备特性state表示资源的可用状态AQS定义两种资源共享方式AQS定义两种队列自定义同步器实现时主要实现以下几种方法&#xff1a;同步等待队列条件等待队列 1&#xff1a;AQS应用之ReentrantLockReentrantLock如何实现synchronized不…

oracle临时表空间不释放

项目报错 nested exception is java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP 原因是临时表空间满了&#xff0c;临时表空间一直增长&#xff0c;未释放导致临时表空间使用率100%。 查询临时表空间使用率 --临时表空间利用率…

拓扑排序 很简单

原文链接&#xff1a;图论第四讲&#xff1a;拓扑排序 说明&#xff1a;CSDN和公众号文章同步发布&#xff0c;需要第一时间收到最新内容&#xff0c;请关注公众号【比特正传】。 之前的图论合集文章中讲了图的存储遍历、最短路等算法&#xff0c;文章链接如下 图论第一讲&am…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑碳捕集机组与氢储能系统协调运行的源荷储低碳经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

AI新工具(20240312) Midjourney官方发布角色一致性功能;免费且开源的简历制作工具;精确克隆语调、控制声音风格

1: Midjourney角色一致性功能 使人物画像在多方面高度一致成为可能。 Midjourney的角色一致性功能的使用方法如下&#xff1a; ⭐在你的输入指令后面加上 --cref URL&#xff0c;其中URL是你选择的角色图像的链接。 ⭐你可以通过 --cw 参数来调整参照的强度&#xff0c;范围…

剑指offer经典题目整理(四)

一、树的子结构 1.链接 树的子结构_牛客题霸_牛客网 (nowcoder.com) 2.描述 给两颗二叉树A B&#xff0c;判断B是不是A的子结构 3.思路 将问题拆解开来&#xff0c;首先是找到a树中子结构的位置&#xff0c;然后是判断是否相同&#xff0c;也就是说&#xff0c;我们需要去…

interFoam-UEqn.H/pEqn.H

压力方程 “pEqn.H” {volScalarField rAU("rAU", 1.0/UEqn.A()); // rAU:在速度方程的的最后一个解中&#xff0c;矩阵对角项系数的倒数surfaceScalarField rAUf("rAUf", fvc::interpolate(rAU)); //转换为表面标量场volVectorField HbyA(con…

36+程序员3站考研:国家线轻松拿捏

基本情况是&#xff1a;年龄较大&#xff0c;比36还大&#xff0c;本科是自考&#xff0c;十几年来一直从事编程相关工作。 第一年考数学太慌了&#xff0c;选择题全蒙的&#xff0c;结果填空题一道没算对&#xff0c;大题全不会&#xff0c;所以尽管总分280多但是数学没过国家…