题解 | #字符串处理#
字符串合并处理
http://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
思路
直接模拟
如何利用好Java的库来缩短编写时间
请叫我调库大师
代码
import java.util.*;
import java.lang.*;
// import java.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
//获取输入
Scanner in = new Scanner(System.in);
String s1=in.next();
String s2=in.next();
//合并字符串
String s=s1+s2;
int len=s.length();
ArrayList<Character> a0=new ArrayList<>();//偶数位字符
ArrayList<Character> a1=new ArrayList<>();//奇数位字符
for(int i=0;i<len;i++){
if(i%2==0){a0.add(s.charAt(i));}//
if(i%2==1){a1.add(s.charAt(i));}//
}
//ArrayList中的Collections.reverse()为逆排;
Collections.sort(a0);Collections.sort(a1);
String res="";
int k0=0;//偶数下标
int k1=0;//技术下标
for(int i=0;i<len;i++){
if(k0<a0.size() && i%2==0){
//添加偶数位
res=res+zh(a0.get(k0++));
}
else if(k1<a1.size() && i%2==1){
//添加奇数位
res=res+zh(a1.get(k1++));
}
else if(k0>=a0.size()){
//奇数位剩余
res=res+zh(a1.get(k1++));
}
else if(k1>=a1.size()){
//偶数位剩余
res=res+zh(a0.get(k0++));
}
}
System.out.println(res);
}
static public String zh(char a){
//合法的十六进制字符就判断
if((a-'a'<=5 && a-'a'>=0) ||(a-'A'>=0 && a-'A'<=5)||(a-'0'>=0 && a-'0'<=9)){
StringBuilder sa=new StringBuilder(Integer.toBinaryString(Integer.parseInt(a+"",16)));
while(sa.length()<4){
sa.replace(0,0,"0");
}
sa.reverse();
String sa1=sa+"";
return Integer.toHexString(Integer.parseInt(sa1,2)).toUpperCase();
}
//不合法的十六进制字符直接返回
return a+"";
}
}
时间复杂度:O(n)
空间复杂度:O(n)