基于Java解决华为机试之字符串合并处理实操

 更新时间:2022年02月23日 08:44:51   作者:97的风  
这篇文章主要介绍了基于Java解决华为机试之字符串合并处理,文章以实操展开主题内容,具有一的参考价值,需要的小伙伴可以参考一下,希望对工作中的你有所帮助

1.简述

描述:

按照指定规则对输入的字符串进行处理。

详细描述:

第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串 "dec" 和字符串 "fab" , 合并后生成的字符串为 "decfab"

第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”,分别对下标为偶数的字符'd'、'c'、'a'和下标为奇数的字符'e'、'f'、'b'进行排序(生成 'a'、'c'、'd' 和 'b' 、'e' 、'f'),再依次分别放回原串中的偶数位和奇数位,新字符串变为“abcedf”

第三步:对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符,需要进行转换操作。转换规则如下:对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符(注:字符 a~f 的十六进制对应十进制的10~15,大写同理)。如字符 '4',其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 '2'。如字符 ‘7’,其二进制为 0111 ,则翻转后为 1110 ,对应的十进制是14,转换为十六进制的大写字母为 'E'。如字符 'C',代表的十进制是 12 ,其二进制为 1100 ,则翻转后为 0011,也就是3。转换后的字符是 '3'。

根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"

注意本题含有多组样例输入。

数据范围:输入的字符串长度满足1 \le n \le 100 \1≤n≤100 

输入描述:

本题含有多组样例输入。每组样例输入两个字符串,用空格隔开。

输出描述:

输出转化后的结果。每组样例输出一行。

示例1

输入:

dec fab

输出:

5D37BF

示例2

输入:

ab CD

输出:

3B5D

说明:

合并后为abCD,按奇数位和偶数位排序后是CDab(请注意要按ascii码进行排序,所以C在a前面,D在b前面),转换后为3B5D

示例3

输入:

123 15

输出:

88C4A

代码实现:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main{
    public static void main(String[] str){
        processStr();
    }

    public static void processStr(){
        //hash 保存十六进制反转的对应表, 空间换时间
        Map<Character,Character> map = new HashMap<Character,Character>(){{
            put('0', '0');
            put('1', '8');
            put('2', '4');
            put('3', 'C');
            put('4', '2');
            put('5', 'A');
            put('6', '6');
            put('7', 'E');
            put('8', '1');
            put('9', '9');
            put('a', '5');
            put('b', 'D');
            put('c', '3');
            put('d', 'B');
            put('e', '7');
            put('f', 'F');
            put('A', '5');
            put('B', 'D');
            put('C', '3');
            put('D', 'B');
            put('E', '7');
            put('F', 'F');
        }};

        Scanner scanner = new Scanner(System.in);
        String s = "";
        while (scanner.hasNext()){
            String s1 = scanner.next();
            String s2 = scanner.next();
            char[] ch = (s1 + s2).toCharArray();
           //偶数位
            char[]r1 = new char[ch.length / 2];
            //奇数位 
            char[]r2 = new char[ch.length - ch.length / 2];
            for (int i = 0, j = 0, k = 0; i < ch.length; i++){
                if ( i % 2 == 0){
                    r2[j] = ch[i];
                    j++;
                }else {
                    r1[k] = ch[i];
                    k++;
                }
            }

            Arrays.sort(r1);
            Arrays.sort(r2);

            for (int i = 0, j = 0, k = 0; i < ch.length; i++){
                if (i % 2 == 0){
                    //注意存在码表不包含的情况,使用原值
                    ch[i] = map.getOrDefault(r2[j], r2[j]);
                    j++;
                }else {
                    ch[i] = map.getOrDefault(r1[k], r1[k]);
                    k++;
                }
            }

            s = new String(ch);
            System.out.println(s);

        }

        //return s;
    }
}

到此这篇关于 基于Java解决华为机试之字符串合并处理实操的文章就介绍到这了,更多相关Java字符串合并处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java解析Excel文件并把数据存入数据库

    Java解析Excel文件并把数据存入数据库

    本篇文章主要介绍了Java解析Excel文件并把数据存入数据库 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Spring解析配置类和扫描包路径的详细过程

    Spring解析配置类和扫描包路径的详细过程

    这篇文章主要介绍了Spring解析配置类和扫描包路径的详细过程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12
  • java实现文件上传功能

    java实现文件上传功能

    这篇文章主要为大家详细介绍了java实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 详解Java是如何通过接口来创建代理并进行http请求

    详解Java是如何通过接口来创建代理并进行http请求

    今天给大家带来的知识是关于Java的,文章围绕Java是如何通过接口来创建代理并进行http请求展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • SpringSecurity中PasswordEncoder的使用

    SpringSecurity中PasswordEncoder的使用

    密码存储和加密是非常重要的,本文主要介绍了SpringSecurity中PasswordEncoder的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 详解通过JDBC进行简单的增删改查(以MySQL为例)

    详解通过JDBC进行简单的增删改查(以MySQL为例)

    JDBC是用于执行SQL语句的一类Java API,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作。通过封装,可以使开发人员使用纯Java API完成SQL的执行。
    2017-01-01
  • springboot中filter的用法详解

    springboot中filter的用法详解

    本篇文章主要介绍了springboot中filter的用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 详解消息队列及RabbitMQ部署和使用

    详解消息队列及RabbitMQ部署和使用

    消息队列是最古老的中间件之一,从系统之间有通信需求开始,就自然产生了消息队列。本文告诉什么是消息队列,为什么需要消息队列,常见的消息队列有哪些,RabbitMQ的部署和使用
    2021-09-09
  • mybatis-plus中更新null值的问题解决

    mybatis-plus中更新null值的问题解决

    本文主要介绍 mybatis-plus 中常使用的 update 相关方法的区别,以及更新 null 的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Java图片处理 (文字水印、图片水印、缩放、补白)代码实例

    Java图片处理 (文字水印、图片水印、缩放、补白)代码实例

    这篇文章主要介绍了Java图片处理 (文字水印、图片水印、缩放、补白)代码实例,本文直接给出实现代码,需要的朋友可以参考下
    2015-06-06

最新评论