算法题之端口(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); } }