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

字符串合并处理

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

import java.util.*;

public class Main {
    static HashMap<Character, String> map;
    static HashMap<String, String> map1;

    public static void main(String[] args) {
        map = new HashMap<>();
        map.put('0', "0000");
        map.put('1', "0001");
        map.put('2', "0010");
        map.put('3', "0011");
        map.put('4', "0100");
        map.put('5', "0101");
        map.put('6', "0110");
        map.put('7', "0111");
        map.put('8', "1000");
        map.put('9', "1001");
        map.put('A', "1010");
        map.put('B', "1011");
        map.put('C', "1100");
        map.put('D', "1101");
        map.put('E', "1110");
        map.put('F', "1111");
        map.put('a', "1010");
        map.put('b', "1011");
        map.put('c', "1100");
        map.put('d', "1101");
        map.put('e', "1110");
        map.put('f', "1111");

        map1 = new HashMap<>();
        map1.put("0000", "0");
        map1.put("0001", "1");
        map1.put("0010", "2");
        map1.put("0011", "3");
        map1.put("0100", "4");
        map1.put("0101", "5");
        map1.put("0110", "6");
        map1.put("0111", "7");
        map1.put("1000", "8");
        map1.put("1001", "9");
        map1.put("1010", "A");
        map1.put("1011", "B");
        map1.put("1100", "C");
        map1.put("1101", "D");
        map1.put("1110", "E");
        map1.put("1111", "F");

        //合并
        Scanner in = new Scanner(System.in);
        String s1 = in.next();
        String s2 = in.next();
        String input = s1 + s2;
        //排序
        input = sort(input);
        //转换
        input = change(input);
        System.out.println(input);
    }

    private static String change(String input) {
        StringBuffer stringBuffer = new StringBuffer();
        int length = input.length();
        for (int i = 0; i < length; i++) {
            char c = input.charAt(i);
            String s = String.valueOf(c);
            //需要转换
            if (s.matches("^[0-9]|[A-F]|[a-f]$")) {
                //十六进制转为二进制字符串
                String str = map.get(c);
                //倒序排列
                str = inverse(str);
                //二进制转十进制
                s = map1.get(str);
            }
            stringBuffer.append(s);
        }
        return stringBuffer.toString();
    }

    private static String inverse(String str) {
        StringBuffer stringBuffer = new StringBuffer();
        int length = str.length();
        for (int i = 0; i < length; i++) {
            stringBuffer.append(str.charAt(length - i - 1));
        }
        return stringBuffer.toString();
    }


    private static String sort(String input) {
        int length = input.length();
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 2; j++) {
                if ((int) input.charAt(j) > (int) input.charAt(j + 2)) {
                    input = replaceIndex(j, j + 2, input);
                }
            }
        }
        return input;
    }

    private static String replaceIndex(int index1, int index2, String res) {
        String s1 = String.valueOf(res.charAt(index1));
        String s2 = String.valueOf(res.charAt(index2));
        res = replaceIndex(index1, res, s2);
        res = replaceIndex(index2, res, s1);
        return res;
    }

    private static String replaceIndex(int index, String res, String str) {
        return res.substring(0, index) + str + res.substring(index + 1);
    }
}

解题思路:

1, 十六进制和二进制之间的转换, 可以直接在Map中定义;

2, 按照步骤一步步转换即可

全部评论

相关推荐

程序员小白条:三方不签,不就是纯实习骗人吗,还是小公司,没毛了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务