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

字符串合并处理

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

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            String input = scanner.nextLine().replace(" ", "");
            char[] chars = input.toCharArray();

            // 转换0-9,A-F,a-f
            Map<String, String> map = new HashMap<>();
            for (int i = 0; i < 10; i++) {
                map.put(i + "", getIntResult(i));
            }
            String[] strings = {"A", "B", "C", "D", "E", "F"};
            List<String> stringList = Arrays.asList(strings);
            for (String str : stringList) {
                int i = charToInt(str);
                map.put(str, getIntResult(i));
                map.put(str.toLowerCase(Locale.ROOT), getIntResult(i));
            }

            // 第一步
            List ji = new ArrayList(chars.length);
            List ou = new ArrayList(chars.length);
            for (int i = 0; i < chars.length; i++) {
                if (i % 2 == 0) {
                    ou.add(chars[i]);
                } else {
                    ji.add(chars[i]);
                }
            }
            ou.sort(Comparator.comparingInt((Character o) -> o));
            ji.sort(Comparator.comparingInt((Character o) -> o));

            // 第二步
            List<Character> data = new ArrayList(chars.length);
            for (int i = 0; i < chars.length; i++) {
                if (i % 2 == 0) {
                    data.add((Character) ou.get(i / 2));
                } else {
                    data.add((Character) ji.get(i / 2 + i % 2 - 1));
                }
            }

            StringBuilder stringBuilder = new StringBuilder();
            for (Character temp : data) {
                if (temp >= 'A' && temp <= 'F' || temp >= 'a' && temp <= 'f' || temp >= '0' &&
                        temp <= '9') {
                    stringBuilder.append(map.get(temp + ""));
                    continue;
                }
                stringBuilder.append(temp + "");
            }
            System.out.println(stringBuilder);
        }
    }

    private static String getIntResult(int i) {
        if (i == 0) {
            return "0";
        }
        StringBuilder builder = new StringBuilder("0000");
        String binaryString = Integer.toBinaryString(i);
        if (binaryString.length() < 4) {
            binaryString = builder.substring(0, 4 - binaryString.length()) + binaryString;
        }
        StringBuilder binaStr = new StringBuilder(binaryString);
        String revertStr = binaStr.reverse().toString();
        int j = Integer.parseInt(revertStr, 2);
        if (j >= 10 && j <= 15) {
            return intToChar(j);
        } else {
            return j + "";
        }
    }

    private static int charToInt(String str) {
        String[] strings = {"A", "B", "C", "D", "E", "F"};
        for (int i = 10; i < strings.length + 10; i++) {
            if (str.equals(strings[i - 10])) {
                return i;
            }
        }
        return 0;
    }

    private static String intToChar(int ints) {
        Character[] temp = new Character[] {'A', 'B', 'C', 'D', 'E', 'F'};
        for (int i = 10; i < 16; i++) {
            if (ints == i) {
                return temp[ints - 10] + "";
            }
        }
        return "";
    }
}

全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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