题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in); String a = sc.next(); String b = sc.next(); String str = a + b; ArrayList<Character> w1 = new ArrayList<>(); ArrayList<Character> w2 = new ArrayList<>(); for(int i = 0; i < str.length(); i++){ if(i % 2 ==0){ w1.add(str.charAt(i)); }else{ w2.add(str.charAt(i)); } } Collections.sort(w1); Collections.sort(w2); StringBuilder s = new StringBuilder(); int x = 0; while(x < w1.size() || x < w2.size()){ if(x < w1.size()) s.append(w1.get(x)); if(x < w2.size()) s.append(w2.get(x)); x++; } str = s.toString(); StringBuilder res =new StringBuilder(); char[] word = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; for(int i = 0; i < str.length(); i++){ char t = str.charAt(i); if(Character.isDigit(t)){ int m = t -'0'; StringBuilder code =new StringBuilder( String.format("%04d",Integer.parseInt(Integer.toBinaryString(m)))); res.append(word[Integer.parseInt(code.reverse().toString(),2)]); }else if(t <= 'F' && t >= 'A'){ int m = t -'A' + 10; StringBuilder code =new StringBuilder(Integer.toBinaryString(m)); res.append(word[Integer.parseInt(code.reverse().toString(),2)]); }else if(t <= 'f' && t >='a'){ int m = t -'a' + 10; StringBuilder code =new StringBuilder(Integer.toBinaryString(m)); res.append(word[Integer.parseInt(code.reverse().toString(),2)]); }else{ res.append(t); } } System.out.println(res.toString()); } }