题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner ssc = new Scanner(System.in); while (ssc.hasNext()) { String s1 = ssc.next(); String s2 = ssc.next(); //将字符串拼接起来 String s = s1 + s2; List<Character> list1 = new ArrayList<>(); List<Character> list2 = new ArrayList<>(); for (int i = 0 ; i < s.length(); i++) { //偶数 if (i % 2 == 0) { list1.add(s.charAt(i)); continue; } //奇数 if (i % 2 == 1) { list2.add(s.charAt(i)); } } Collections.sort(list1); Collections.sort(list2); StringBuilder sb = new StringBuilder(); for (int i = 0, j = 0, k = 0; i < s.length(); i++) { if (i % 2 == 0) { sb.append(list1.get(k)); k++; continue; } if (i % 2 == 1) { sb.append(list2.get(j)); j++; } } //完成第一步后,现在开始第二步 Map<Character, Integer> map = new HashMap<>(); map.put('a', 10); map.put('b', 11); map.put('c', 12); map.put('d', 13); map.put('e', 14); map.put('f', 15); map.put('A', 10); map.put('B', 11); map.put('C', 12); map.put('D', 13); map.put('E', 14); map.put('F', 15); String s3 = sb.toString(); StringBuilder finalSb = new StringBuilder(); for (int i = 0; i < s3.length(); i++) { //如果是数字 if (Character.isDigit(s3.charAt(i))) { int revBinary = isReverseBinary(s3.charAt(i)); finalSb.append(Integer.toString(revBinary, 16).toUpperCase()); continue; } if (Character.isLetter(s3.charAt(i))) { if (map.containsKey(s3.charAt(i))) { int repreBinary = isBinary(map.get(s3.charAt(i))); finalSb.append(Integer.toString(repreBinary, 16).toUpperCase()); continue; } } finalSb.append(s3.charAt(i)); } System.out.println(finalSb.toString()); } } private static int isReverseBinary(char x) { int tmp = x - '0'; tmp = isBinary(tmp); return tmp; } private static int isBinary(int tmp) { StringBuilder sb = new StringBuilder(); while (tmp > 0) { sb.append(tmp % 2); tmp /= 2; } while (sb.length() < 4) { sb.append(0); } return Integer.parseInt(sb.toString(), 2); } }