题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.*;
import java.lang.*;
// 注意类名必须为 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 s = in.nextLine();
s = s.replaceAll(" ", "");//对取来的字符串去掉空格
//根据字符串长度是否能被2整除确定偶数位数组的长度
int l0 = 0;
int l1 = s.length() / 2;
if (s.length() % 2 == 0) {
l0 = s.length() / 2;
} else {
l0 = s.length() / 2 + 1;
}
char[] c0 = new char[l0];
char[] c1 = new char[l1];
//根据字符串长度是否能被2整除,分别将奇数位和偶数位的字符放入数组;
int i = 0;
if (s.length() % 2 == 0) {
for (; i < s.length(); i += 2) {
c0[i / 2] = s.charAt(i);
c1[i / 2] = s.charAt(i + 1);
}
} else {
for (; i < s.length() - 1; i += 2) {
c0[i / 2] = s.charAt(i);
c1[i / 2] = s.charAt(i + 1);
}
c0[l0 - 1] = s.charAt(s.length() - 1);
}
//对数组排序后重新拼接成新的字符串
Arrays.sort(c0);
Arrays.sort(c1);
int j=0;
StringBuilder sb = new StringBuilder();
if (s.length() % 2 == 0) {
for (; j < s.length(); j += 2) {
sb.append(c0[j/2]);
sb.append(c1[j/2]);
}
} else {
for (; j < s.length() - 1; j += 2) {
sb.append(c0[j/2]);
sb.append(c1[j/2]);
}
sb.append(c0[l0 - 1]);
}
s=sb.toString();
//对新字符串中的[0-9a-fA-F]按第三步要求进行处理
StringBuilder sbb=new StringBuilder();
for(int k=0;k<s.length();k++){
String sk=String.valueOf(s.charAt(k));
if(sk.matches("[0-9a-fA-F]")){
int sk16=Integer.parseInt(sk,16);
StringBuilder sb0=new StringBuilder();
String s20=Integer.toBinaryString(sk16);
int buwei = 4-s20.length();
for(int b=0;b<buwei;b++) {s20="0"+s20;}
sb0.append(s20);
sb0.reverse();
int s2 =Integer.parseInt(sb0.toString(),2);
String s16=Integer.toString(s2,16);
String ski=s16.toUpperCase();
sbb.append(ski);
}else{
sbb.append(sk);
}
}
System.out.println(sbb.toString());
}
}
}
查看15道真题和解析