HJ30 字符串合并处理(Java版)

news2025/1/18 5:27:08

一、试题地址

字符串合并处理_牛客题霸_牛客网

二、试题内容

描述:

定义“调整”操作为,对于一个十进制数字,将其转换为二进制数,翻转,再转换为十六进制数(大写)。例如,(4)10(4)10​ 对应的二进制数为 (100)2(100)2​ ,翻转后得到 (001)2(001)2​ ,再转换为十六进制数为 (1)16(1)16​ 。

对于给定的仅由小写字母 a-fa-f 、大写字母 A-FA-F 、数字 0-90-9 构成的字符串 ss 和 tt ,请按照以下步骤进行处理:

  • 第一步,将 ss 和 tt 合并,形成一个新字符串 uu 。
  • 第二步,将 uu 中奇数位字符从小到大进行排序,随后将偶数位字符也从小到大进行排序,得到 u′u′ 。
  • 第三步,对 u′u′ 中的字符依次转换为十进制数,随后执行“调整”操作。

输出最终的字符串。

输入描述:

在一行上输入两个长度 1≦length(s),length(t)≦1001≦length(s),length(t)≦100 ,仅由小写字母 a-fa-f 、大写字母 A-FA-F 、数字 0-90-9 构成的字符串 ss 和 tt ,代表待处理的字符串。

输出描述:

在一行上输出一个字符串,代表最终的字符串。

示例1:

输入:

dec fab

输出:

5D37BF

说明:

在这个样例中,第一步合并后得到 u="decfab"u="decfab" ;第二步,排序得到 u′="abcedf"u′="abcedf" ;随后,按位转换为十进制数,并执行“调整”操作:
∙ ∙对于第一个字符 ("a")16("a")16​ ,其十进制数为 (10)10(10)10​ ,二进制数为 (1010)2(1010)2​ ,翻转后得到 (0101)2(0101)2​ ,再转换回十六进制数为 (5)16(5)16​ ;
∙ ∙对于第二个字符 ("b")16=(11)10=(1011)2("b")16​=(11)10​=(1011)2​ ,翻转后得到 (1101)2=(D)16(1101)2​=(D)16​ ;
∙ ∙对于第三个字符 ("c")16=(12)10=(1100)2("c")16​=(12)10​=(1100)2​ ,翻转后得到 (0011)2=(3)16(0011)2​=(3)16​ ;
∙ ∙对于第四个字符 ("e")16=(14)10=(1110)2("e")16​=(14)10​=(1110)2​ ,翻转后得到 (0111)2=(7)16(0111)2​=(7)16​ ;
∙ ∙对于第五个字符 ("d")16=(13)10=(1101)2("d")16​=(13)10​=(1101)2​ ,翻转后得到 (1011)2=(B)16(1011)2​=(B)16​ ;
∙ ∙对于第六个字符 ("f")16=(15)10=(1111)2("f")16​=(15)10​=(1111)2​ ,翻转后得到 (1111)2=(F)16(1111)2​=(F)16​ 。

示例2:

输入:

ab CD

输出:

3B5D

说明:

在这个样例中,第一步合并后得到 u="abCD"u="abCD" ;第二步,排序得到 u′="CDab"u′="CDab" 。需要特别注意的是,这里的排序是按照 AsciiAscii 码表的顺序进行排序的。

示例3:

输入:

123 15

输出:

88C4A
 示例4:

输入:

Eqr v9oEb12U2ur4xu7rd931G1f50qDo

输出:

8084842CAE9B9G7D7BUFooqqrrrvuxu

三、运行要求

试题等级:较难  通过率:22.77%  时间限制:1秒  空间限制:32M

四、参考代码

package xu.com.coder.test3;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Exam30 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str1 = in.nextLine();

            //去除掉里面的空格
            str1 = str1.replaceAll("\\s+", "");

            Character[] oddArrays = getOddStrings(str1);
            Character[] evenArrays = getEvenStrings(str1);

            //按照ascii码进行排序
            Arrays.sort(oddArrays);
            Arrays.sort(evenArrays);

            Character[] str3Array = mergeArray(evenArrays, oddArrays);
            for (char temp : str3Array) {

                //如果不是十六进制以内的字符,则原样输出
                try{
                    String binaryString = hexToBinary(Character.toString(temp));

                    //不足4位的前面补0使其满足4位长度
                    while (binaryString.length() < 4) {
                        binaryString = "0" + binaryString;
                    }

                    String reversed = new StringBuffer(binaryString).reverse().toString();
                    String reversedHex = binaryToHex(reversed);

                    System.out.print(reversedHex);

                }catch (Exception e){
                    System.out.print(temp);
                }

            }
            System.out.println();
        }
        in.close();
    }

    //交替合并两个数组,从第一个入参数组开始
    public static Character[] mergeArray(Character[] array1, Character[] array2) {
        Character[] result = new Character[array1.length + array2.length];
        int i = 0, j = 0, k = 0;

        while (i < array1.length && j < array2.length) {
            result[k++] = array1[i++];
            result[k++] = array2[j++];
        }

        // 如果array1有剩余元素,则将其全部添加到结果数组末尾
        while (i < array1.length) {
            result[k++] = array1[i++];
        }

        // 如果array2有剩余元素,则将其全部添加到结果数组末尾
        while (j < array2.length) {
            result[k++] = array2[j++];
        }

        return result;
    }

    //十六进制(字符串)转二进制(字符串)
    public static String hexToBinary(String hexString) {
        int decimal = Integer.parseInt(hexString, 16);
        return Integer.toBinaryString(decimal);
    }

    // 二进制(字符串)转十六进制(字符串)
    public static String binaryToHex(String binaryString) {
        int decimal = Integer.parseInt(binaryString, 2);
        return Integer.toHexString(decimal).toUpperCase();
    }

    //获取奇数位数据
    private static Character[] getOddStrings(String input) {
        char[] inputArray = input.toCharArray();
        List<Character> characterList = new ArrayList<>();
        for (int i = 1; i < inputArray.length; i += 2) {
            characterList.add(inputArray[i]);
        }
        return characterList.toArray(new Character[]{});
    }

    //获取偶数位数据
    private static Character[] getEvenStrings(String input) {
        char[] inputArray = input.toCharArray();
        List<Character> characterList = new ArrayList<>();
        for (int i = 0; i < inputArray.length; i += 2) {
            characterList.add(inputArray[i]);
        }
        return characterList.toArray(new Character[]{});
    }
}

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

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

相关文章

Linux和Docker常用终端命令:保姆级图文详解

文章目录 前言1、Docker 常用命令1.1、镜像管理1.2、容器管理1.3、网络管理1.4、数据卷管理1.5、监控和性能管理 2、Linux 常用命令分类2.1、文件和目录管理2.2、用户管理2.3、系统监控和性能2.4、软件包管理2.5、网络管理 前言 亲爱的家人们&#xff0c;创作很不容易&#xf…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了&#xff0c;整个GPU的架构基本就熟了。市面上有很多GPU厂家&#xff0c;他们产品的架构各不相同&#xff0c;但是核心往往差不多&#xff0c;整明白一了个基本上就可以触类旁通了。下面这张图信息量很大&#xff0c;可以结合博客GPU 英伟达GPU架构回…

强化学习的数学原理(十-1)Actor-Critic初步

Actor-Critic的方法是PG方法的一种&#xff0c;它把PG方法与value function结合起来了。 一、基本介绍 Actor&#xff1a;代表 policy update。算法中采用Actor来产生动作。 Critic&#xff1a;代表 policy evaluation 或者 value estimation。算法中采用Critic来评价policy…

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12

PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件&#xff0c;支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件&#xff0c;无需注册即可使用。它提供了丰富的 PDF 处理功能&#xff0c;极大提升了 PDF 文件管理的便捷性和效…

IIO(Industrial I/O)驱动介绍

文章目录 IIO&#xff08;Industrial I/O&#xff09;驱动是Linux内核中用于工业I/O设备的子系统&#xff0c;主要用于处理传感器数据采集和转换。以下是其关键点&#xff1a; 功能 数据采集&#xff1a;从传感器读取数据。数据处理&#xff1a;对原始数据进行滤波、校准等操作…

Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)

文章目录 概要1 Realsense相机驱动安装Method1: 使用Intel服务器预编译包Method2: 使用ROS服务器预编译包Method3: 使用SDK源代码方法对比总结 2 Realsense-ROS通讯配置与使用2.1 Realsense-ROS包安装2.2 ROS节点启动 小结Reference 概要 本文首先阐述了Realsense相机驱动安装…

vscode配置opencv4.8环境

1 安装cmake 下载链接如下https://github.com/Kitware/CMake/releases/download/v3.27.7/cmake-3.27.7-windows-x86_64.zip 解压后放到指定目录后&#xff0c;添加bin目录到环境变量即可。 2 mingw安装 下载链接如下(下图的x86_64-posix-sjlj)&#xff1a; Download x86_6…

软件测试 —— Selenium(等待)

软件测试 —— Selenium&#xff08;等待&#xff09; 一个例子强制等待使用示例&#xff1a;为什么不推荐使用强制等待&#xff1f;更好的选择 隐式等待 implicitly_wait&#xff08;&#xff09;隐式等待和强制等待的区别隐式等待&#xff08;Implicit Wait&#xff09;强制等…

自动化之Ansible

一、Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器)&#xff0c;因此Ansible可以管理 运程虚拟机、物理机&#xff0c;也可以是本地主机(linux、windows)。 Ansible通过SSH协议实现 管理节点、远程节点的通信。 只要是能够SSH登录的主机…

算法(蓝桥杯)贪心算法4——拦截导弹的系统数量求解

题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 假设某天雷达捕捉到敌国的导弹来袭。由于该系统还在试用…

一些常见的Java面试题及其答案

Java基础 1. Java中的基本数据类型有哪些&#xff1f; 答案&#xff1a;Java中的基本数据类型包括整数类型&#xff08;byte、short、int、long&#xff09;、浮点类型&#xff08;float、double&#xff09;、字符类型&#xff08;char&#xff09;和布尔类型&#xff08;boo…

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

Golang笔记——协程同步

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Golang的协程同步的实现和应用场景。 文章目录 协程同步是什么&#xff1f;为什么需要协程同步&#xff1f;常见的协程同步机制互斥锁&#xff0…

Visual Studio Community 2022(VS2022)安装方法

废话不多说直接上图&#xff1a; 直接上步骤&#xff1a; 1&#xff0c;首先可以下载安装一个Visual Studio安装器&#xff0c;叫做Visual Studio installer。这个安装文件很小&#xff0c;很快就安装完成了。 2&#xff0c;打开Visual Studio installer 小软件 3&#xff0c…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络&#xff08;RPN&#xff09; 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

mac intel芯片下载安卓模拟器

一、调研 目前主流两个模拟器&#xff1a; 雷神模拟器 不支持macosmumu模拟器pro版 不支持macos intel芯片 搜索到mumu的Q&A中有 “Intel芯片Mac如何安装MuMu&#xff1f;” q&a&#x1f517;&#xff1a;https://mumu.163.com/mac/faq/install-on-intel-mac.html 提…

发送dubbo接口

史上最强&#xff0c;Jmeter接口测试-dubbo接口实战&#xff08;超级详细&#xff09;_jmeter调用dubbo接口-CSDN博客 干货分享&#xff1a;Dubbo接口及测试总结~ 谁说dubbo接口只能Java调用&#xff0c;我用Python也能轻松搞定 telnet xxx.xxx.xxx.xxx 端口号 再回车显示dub…

Leetcode 91. 解码方法 动态规划

原题链接&#xff1a;Leetcode 91. 解码方法 自己写的代码&#xff1a; class Solution { public:int numDecodings(string s) {int ns.size();vector<int> dp(n,1);if(s[n-1]0) dp[n-1]0;for(int in-2;i>0;i--){if(s[i]!0){string ts.substr(i,2);int tmpatoi(t.c…

SpringBoot源码解析(七):应用上下文结构体系

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…

SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现

SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现 目录 SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现分类效果基本描述程序设计参考资料 分类效果 基本描述 SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长…