题目描述:
给定两个字符集合, 一个是全量字符集, 一个是已占用字符集, 已占用字符集中的字符不能再使用, 要求输出剩余可用字符集。
输入描述:
输入一个字符串 一定包含@,@前为全量字符集 @后的为已占用字符集
已占用字符集中的字符,一定是全量字符集中的字符,字符集中的字符跟字符之间使用英文逗号隔开
每个字符都表示为字符+数字的形式,用英文冒号分隔,比如a:1标识一个a字符
字符只考虑英文字母,区分大小写,数字只考虑正整型 不超过100
如果一个字符都没被占用,@标识仍存在
输出描述:
输出可用字符集,
不同的输出字符集之间用回车换行,
注意:输出的字符顺序要跟输入的一致,不能输出b:3,a:2,c:2
如果某个字符已全部占用,则不需要再输出
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
//拆分字符集为两个字符串集合
int aIndex = str.indexOf("@");
String[] strs = str.split("@");
if (aIndex == str.length() - 1) {
System.out.println(strs[0]);
} else {
//将字符串集合转化为map
//所有字符集合
String[] allStr = strs[0].split(",");
//可用字符集合
String[] useStr = strs[1].split(",");
Map<String, Integer> allStrMap = new LinkedHashMap<>();
Map<String, Integer> useStrMap = new LinkedHashMap<>();
//通过map键值对来去掉已用字符
for (int i = 0; i < allStr.length; i++) {
String[] coreStr = allStr[i].split(":");
allStrMap.put(coreStr[0], Integer.parseInt(coreStr[1]));
}
for (int i = 0; i < useStr.length; i++) {
String[] coreStr = useStr[i].split(":");
useStrMap.put(coreStr[0], Integer.parseInt(coreStr[1]));
}
// Map<String,Integer> resStrMap = new LinkedHashMap<>();
for (String useKey : useStrMap.keySet()) {
Integer allValue = allStrMap.get(useKey);
Integer usedValue = useStrMap.get(useKey);
if (allValue != null && (allValue - usedValue > 0)) {
allStrMap.put(useKey, allValue - usedValue);
}
}
Iterator<String> iterator = allStrMap.keySet().iterator();
for (String key : allStrMap.keySet()) {
iterator.next();
if (iterator.hasNext()) {
System.out.print(key + ":" + allStrMap.get(key) + ",");
} else {
System.out.print(key + ":" + allStrMap.get(key));
}
}
}
}
原文链接:https://blog.csdn.net/weixin_44052055/article/details/123926523