Vlan
是一种为局域网设备进行逻辑划分的技术
为了标识不同的vlan
引入了vlan id
: 1 ~ 4094
之间的整数
定义一个vlan id
的资源池
资源池中连续的vlan
用开始vlan-结束vlan
表示,
不连续的用单个整数表示
所有的vlan
用英文逗号
连接起来
现有一个vlan
资源池,业务需要从资源池中申请一个vlan
需要你输出从vlan
资源池中移除申请的vlan
后的资源池
第一行为字符串格式
的vlan
资源池
第二行为业务要申请的vlan
vlan
的取值范围1 ~ 4094
从输入vlan
资源池中移除申请的vlan
后
字符串格式的vlan
资源池
输出要求满足题目中要求的格式,
并且要求从小到大升序输出
如果申请的vlan
不在原资源池,输出升序排序的原资源池的字符串即可
1-5
2
1,3-5
原vlan资源池中有1 2 3 4 5
移除2
后
剩下的1 3 4 5
按照升序排列的方式为 1 3-5
20-21,15,18,30,5-10
15
5-10,18,20-21,30
原vlan资源池中有5 6 7 8 9 10 15 18 20 21 30
移除15
后 剩下的为 5 6 7 8 9 10 18 20 21 30
按照题目描述格式并升序后的结果为5-10,18,20-21,30
5,1-3
10
1-3,5
资源池中有1 2 3 5
申请的资源不在资源池中
将原池升序输出为1-3,5
输入池中vlan数量范围为2 ~ 2094
的整数
资源池中vlan不重复且合法1 ~ 2094
的整数
输入是乱序的
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/**
* Created with IntelliJ IDEA.
* Author: Amos
* E-mail: amos@amoscloud.com
* Date: 2021/4/1
* Time: 16:07
* Description:
*/
public class Main0040 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String input = scanner.nextLine();
int request = scanner.nextInt();
solution(input,request);
}
}
private static void solution(String input, int request) {
Set<Integer> set = new TreeSet<>();
for (String str : input.split(",")) {
if (str.contains("-")) {
String[] split = str.split("-");
int start = Integer.parseInt(split[0]);
int end = Integer.parseInt(split[1]);
for (int i = start; i <= end; i++) {
set.add(i);
}
} else {
set.add(Integer.parseInt(str));
}
}
set.remove(request);
ArrayList<Integer> list = new ArrayList<>(set);
StringBuilder sb = new StringBuilder();
Integer start = list.get(0);
Integer last = start;
for (int i = 1; i < list.size(); i++) {
Integer cur = list.get(i);
if (cur == last + 1) {
last = cur;
} else {
append(sb, start, last);
start = last = cur;
}
}
append(sb, start, last);
System.out.println(sb.substring(0, sb.length() - 1));
}
private static void append(StringBuilder sb, Integer start, Integer last) {
if (start.equals(last)) {
sb.append(last).append(",");
} else {
sb.append(start).append("-")
.append(last).append(",");
}
}
}