题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<String> strList = new ArrayList<>();
while (in.hasNextLine()) {
String str = in.nextLine();
strList.add(str);
if (strList.size() == 2) {
String rStr = strList.get(0);
String iStr = strList.get(1);
// 处理R列中的数字
String[] rStrs = rStr.split(" ");
String[] iStrs = iStr.split(" ");
Set<String> iStrSet = new HashSet<>();
// 去掉第一个数字
for (int i = 1; i < iStrs.length; i++) {
iStrSet.add(iStrs[i]);
}
Map<String, Map<Integer, String>> map = new HashMap<>();
for (String s : iStrSet) {
for (int i = 1; i < rStrs.length; i++) {
String indexStr = rStrs[i];
if (indexStr.contains(s)) {
Map<Integer, String> indexMap = map.get(s);
if (indexMap == null) {
indexMap = new HashMap<>();
map.put(s, indexMap);
}
// 数字实际的位置不包含首个的个数
indexMap.put(i - 1, indexStr);
}
}
}
List<String> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, Comparator.comparingInt(Integer::parseInt));
List<String> outputList = new ArrayList<>();
for (String key : keys) {
Map<Integer, String> indexMap = map.get(key);
outputList.add(key);
outputList.add(String.valueOf(indexMap.size()));
List<Integer> indexKeys = new ArrayList<>(indexMap.keySet());
Collections.sort(indexKeys);
for (Integer indexKey : indexKeys) {
String indexStr = indexMap.get(indexKey);
outputList.add(String.valueOf(indexKey));
outputList.add(indexStr);
}
}
StringBuilder sb = new StringBuilder();
sb.append(outputList.size()).append(" ");
outputList.forEach(e -> sb.append(e).append(" "));
sb.deleteCharAt(sb.length() - 1);
System.out.println(sb);
strList.clear();
}
}
}
}


