题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while(in.hasNextLine()){
String s1 = in.next();
String s2 = in.nextLine();
String s = new StringBuilder(s1+s2).toString();
s = s.replace(" ","");//去掉空格
//System.out.println(s);
//合并操作
int n = s.length();
List<Character> evensChar = new ArrayList<>();
List<Character> oddsChar = new ArrayList<>();
for(int i=0 ; i<n ; ++i){
char c = s.charAt(i);
if(i%2==0){
evensChar.add(c);
}
else{
oddsChar.add(c);
}
}
//排序再组合,升序排列
Collections.sort(evensChar, new Comparator<Character>(){
@Override
public int compare(Character o1, Character o2) {
return o1-o2;
}
});
Collections.sort(oddsChar);
StringBuilder sb = new StringBuilder("");
int evenCount=0, oddCount=0;
for(int i=0 ; i<n ; ++i){
if(i%2 == 0){
sb.append(evensChar.get(evenCount++));
}
else{
sb.append(oddsChar.get(oddCount++));
}
}
//二进制逆转
StringBuilder sb1 = new StringBuilder("");
for(int i=0 ; i<sb.length() ; ++i){
char c = sb.charAt(i);
c = Character.toLowerCase(c);
if((c>='1' && c<='9') || (c>='a' && c<='f')){
int num;
if(c>='1' && c<='9'){
num = Integer.parseInt(c+"");
}
else{
num = c-87;
}
String erjinzhi = reverseBinary(num);
int decimal = Integer.parseInt(erjinzhi, 2);
if(decimal >= 10){
sb1.append((char)(decimal+55));
}
else{
sb1.append((char) (decimal+48));
}
}
else{
sb1.append(sb.charAt(i));
}
}
System.out.println(sb1.toString());
}
}
public static String reverseBinary(int num){
//先转化为二进制形式
StringBuilder sb = new StringBuilder("");
while(num != 0){
if(num%2 == 1){
sb.append('1');
}
else{
sb.append('0');
}
num = num >> 1;
}
while(sb.length() < 4){
sb.append('0');
}
//逆转二进制
return sb.toString();
}
}