ChatGPT(全名:Chat Generative Pre-trained Transformer)近期成为网络讨论的热点话题之一。本题就请你根据某社交网络中发帖的情况,统计每个人帖子中含有 ChatGPT
(不区分大小写)的数量(简称“含茶量”),找出最热衷于讨论这个话题的人,即含茶量排前三的人。
输入格式:
输入在第一行中给出正整数:N(≤104),为参加统计的帖子数量。
随后给出 N 条帖子的信息,每条格式为:第一行给出发帖人 ID,是一个长度不超过 10 位的非空数字串;第二行给出非空的帖子的内容,由不超过 140 个英文字母、数字、空格、标点(只包括 ?
、,
和 .
)组成,以回车结束(回车不算在 140 字内)。
输出格式:
分三行输出含茶量最高的前三个 ID,及其含茶量。有并列时按 ID 的字典序递增输出;如果有含茶量的 ID 不到三个,那么有几个就输出几个,但含茶量为 0 的不要输出。数字间以 1 个空格分隔,行首尾不得有多余空格。
题目保证至少有一个输出。
输入样例:
5
1010
I am not interested in ChatGPT.
233
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
233
they are all ChatGPT
2
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
0002
chatgp, hatGPT and Chatppt, are they all ChatGPTs?
输出样例:
233 4
2 3
0002 1
注意: 2
和 0002
是两个不同的 ID。
代码长度限制
16 KB
Java (javac)
时间限制
700 ms
内存限制
256 MB
其他编译器
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < N; i++) {
String name = br.readLine();
String s = br.readLine();
int count = countChatGPT(s);
if (count!=0) map.merge(name, count, Integer::sum);
}
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list
.stream()
.sorted((o1,o2) -> {
if (!Objects.equals(o1.getValue(), o2.getValue())) return o2.getValue()-o1.getValue();
return o1.getKey().compareTo(o2.getKey());
})
.limit(3)
.forEach(e -> {
System.out.println( e.getKey()+" "+ e.getValue());
});
}
public static int countChatGPT(String input) {
Pattern pattern = Pattern.compile("chatgpt", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
return count;
}
}