题解 | #字符串合并处理#

字符串合并处理

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();
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务