题解 | #字符串合并处理#
字符串合并处理
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);
}
}
}
}
太好了,终于过了九九八十一难了

查看5道真题和解析