题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

Java实现:
思路清晰,代码简洁,欢迎大家交流讨论
代码如下,(注释的第一步、第二步、第三步 对应 题目描述 的处理):
import java.util.*;
        
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s1 = in.next();
        String s2 = in.next();
        // 1.第一步
        char[] chars = s1.concat(s2).toCharArray();
        // 2.第二步
        // 偶数字符数组
        char[] evens;
        // 奇数字符数组
        char[] odds;
        if (chars.length % 2 == 0) {
            evens = new char[chars.length / 2];
            odds = new char[chars.length / 2];
        } else {
            evens = new char[(chars.length / 2) + 1];
            odds = new char[chars.length / 2];
        }
        // 遍历原字符串数组,将奇偶下标的字符存至对应数组
        boolean isEven = true; // 表示原字符串数组的当前下标是否为偶数位
        for (int i = 0; i < chars.length; i++) {
            if (isEven)
                evens[i / 2] = chars[i];
            else
                odds[i / 2] = chars[i];
            isEven = !isEven; // 转换奇偶性
        }
        // 排序
        Arrays.sort(evens);
        Arrays.sort(odds);
        // 将奇偶数组放回原字符串数组
        isEven = true;
        for (int i = 0; i < chars.length; i++) {
            if (isEven)
                chars[i] = evens[i / 2];
            else
                chars[i] = odds[i / 2];
            isEven = !isEven;
        }
        // 3.第三步
        for (int i = 0; i < chars.length; i++) {
            char ch = chars[i];
            if ((ch >= '0' && ch <= '9')
               || (ch >= 'A' && ch <= 'F')
               || (ch >= 'a' && ch <= 'f')) {
                // 解析为十六进制整数再转为二进制字符串
                String binary = Integer.toBinaryString(Integer.parseInt(""+ch, 16));
                // 二进制不足4位,则需前补零,补足4位
                if (binary.length() < 4) {
                    int zeroFill = 4 - binary.length();
                    for (int j = 0; j < zeroFill; j++) {
                        binary = "0" + binary;
                    }
                }
                // 反转二进制
                String reverse = new StringBuilder(binary).reverse().toString();
                // 解析为2进制整数,再转为16进制字符串,再转成大写字母
                char res = Integer.toHexString(Integer.parseInt(reverse, 2)).toUpperCase().charAt(0);
                chars[i] = res;
            }
        }
        // 输出结果
        String ans = new String(chars); 
        System.out.println(ans);
    }
}

#华为机试##笔试刷题#
全部评论

相关推荐

小厂面经,也是我的处女面(30min)1.自我介绍2.spring&nbsp;boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring&nbsp;task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务