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

字符串合并处理

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String first = in.next();
            String second = in.next();
            first += second;
            //奇数和偶数
            int len = first.length();
            int odd = len / 2;
            int even = 0;
            if (len % 2 == 0) {
                even = odd;
            } else {
                even = odd + 1;
            }
            //奇数组
            char[] oddArr = new char[odd];
            //偶数组
            char[] evenArr = new char[even];
            char[] res = first.toCharArray();
            int o = 0;
            int e = 0;
            for (int i = 0; i < len; i++) {
                //偶数下标
                if (i % 2 == 0) {
                    evenArr[e] = res[i];
                    e++;
                } else {
                    //奇数下标
                    oddArr[o] = res[i];
                    o++;
                }
            }
            //奇偶数组排序
            Arrays.sort(oddArr);
            Arrays.sort(evenArr);
            o = 0;
            e = 0;
            //结果重组
            for (int i = 0; i < len; i++) {
                //偶数下标
                if (i % 2 == 0) {
                    res[i] = evenArr[e];
                    e++;
                } else {
                    //奇数下标
                    res[i] = oddArr[o];
                    o++;
                }
                // System.out.print(res[i]);
            }
            // System.out.println();
            //第三步排序:全转二进制后反转,F f不变
            for (int i = 0; i < len; i++) {
                char ch = res[i];
                String str = Character.toString(ch);
                String s = "";
                //数字
                if (Character.isDigit(ch)) {
                    //转二进制
                    s = Integer.toBinaryString(Integer.parseInt(str));
                }
                //字母
                if (ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd' || ch == 'e' ||
                        ch == 'f' || ch == 'A' || ch == 'B' || ch == 'C' || ch == 'D' || ch == 'E' ||
                        ch == 'F') {
                    //转十进制再转二进制
                    s = Integer.toBinaryString(Integer.parseInt(str.substring(0, 1), 16));
                }
                if (s.length() != 0) {
                    //高位补0
                    int length = s.length();
                    if (length < 4) {
                        for (int k = 0; k < 4 - length; k++) {
                            s = "0" + s;
                        }
                    }
                    //反转
                    StringBuilder sb = new StringBuilder(s);
                    s = sb.reverse().toString();
                    //二进制转10进制
                    int num = Integer.parseInt(s.substring(0, s.length()), 2);
                    if (num <= 9) {
                        //保持不变
                        ch = String.valueOf(num).charAt(0);
                    } else if (num == 10) {
                        ch = 'A';
                    } else if (num == 11) {
                        ch = 'B';
                    } else if (num == 12) {
                        ch = 'C';
                    } else if (num == 13) {
                        ch = 'D';
                    } else if (num == 14) {
                        ch = 'E';
                    } else if (num == 15) {
                        ch = 'F';
                    }
                    res[i] = ch;
                }
                System.out.print(ch);
            }

        }
    }
}

太好了,终于过了九九八十一难了

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务