算法题之端口(2017百度实习笔试题)

端口

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:
为了节省信息传递的数据量,A公司内部经常用一种简单的压缩方法来处理端口地址。举例:
[001011:110011:101101:000000]→[1011:110011:101101:](压缩)
[1011:1101::]→[001011:001101:000000:000000](解压)
那么,为何不写个程序来自动完成压缩和解压呢?

输入
输入第一行一个整数a,a为0时表示任务为压缩,a为1时表示任务为解压。
接下来第二行一字符串,表示输入程序的端口信息,保证端口信息只有“0”,“1”,“:”三种字符。

输出
输出一行字符串,表示压缩或解压后得到的端口信息。

样例输入
0
001011:110011:101101:000000

样例输出
1011:110011:101101:

Hint
Input Sample 2
1
1011::1101:
Output Sample 2
001011:000000:001101:000000

 

我的答案(时间紧张,写的复杂。。。)

import com.sun.deploy.util.StringUtils;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int isComprise = scanner.nextInt();
        String line = scanner.next();
        /*int isComprise = 1;
        String line = "1011:110011:101101:";*/

        String result;
        if (isComprise == 0) {
            // 001011:110011:101101:000000
            // 1011:110011:101101:
            String[] group = line.split(":");
            for (int j=0; j<group.length; j++) {
                if (group[j].contains("1")) group[j] = group[j].substring(group[j].indexOf("1"));
                else group[j] = " ";
            }
            result = StringUtils.join(Arrays.asList(group), ":").replace(" ", "");
        } else {
            // 1011:110011:101101:
            // 001011:110011:101101:000000
            String[] group = line.split(":", -1);
            for (int j=0; j<group.length; j++) {
                StringBuilder sb = new StringBuilder();
                for (int i=0; i<6-group[j].length(); i++)
                    sb.append("0");
                group[j] = sb.append(group[j]).toString();
            }
            result = StringUtils.join(Arrays.asList(group), ":");
        }
        System.out.println(result);
    }
}

  

posted @ 2017-04-27 22:09  蓝鲸王子  阅读(441)  评论(0编辑  收藏  举报