题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
华为很多这种繁琐的转换题,根据题意转就行了
import java.io.IOException; import java.util.*; public class Main { public static void main(String[] args) throws IOException { //Eqr v9oEb12U2ur4xu7rd931G1f50qDo Scanner scanner = new Scanner(System.in); String str = scanner.next() + scanner.next(); char[] chars = str.toCharArray(); int half = chars.length >> 1; char[] oddChars = new char[half]; char[] evenChars = new char[(chars.length & 1) == 0 ? half : half + 1]; for (int i = 0, j = 0, k = 0; i < chars.length; i++) { if ((i & 1) == 0) { evenChars[j++] = chars[i]; } else { oddChars[k++] = chars[i]; } } Arrays.sort(oddChars); Arrays.sort(evenChars); char[] newChars = new char[chars.length]; for (int i = 0, j = 0, k = 0; i < chars.length; i++) { char c = (i & 1) == 0 ? evenChars[j++] : oddChars[k++]; String binaryStr = null; if (Character.isDigit(c)) { binaryStr = Integer.toBinaryString((c - '0')); } else if (c >= 'a' && c <= 'f') { binaryStr = Integer.toBinaryString((c - 'a') + 10); } else if (c >= 'A' && c <= 'F') { binaryStr = Integer.toBinaryString((c - 'A') + 10); } if (binaryStr != null) { char[] reversedChars = new char[4]; for (int l = 0; l < reversedChars.length; l++) { int index = binaryStr.length() - l - 1; if (index >= 0) { reversedChars[l] = binaryStr.charAt(index); } else { reversedChars[l] = '0'; } } int num = Integer.parseInt(new String(reversedChars), 2); if (num >= 10) { c = (char) ('A' + num - 10); } else { c = (char) ('0' + num); } } newChars[i] = c; } System.out.println(new String(newChars)); } }