import java.util.*; public class Main { public static void main(String[] args) { // 创建Scanner对象,用于读取输入数据 Scanner in = new Scanner(System.in); // 读取第一行输入的整数n,代表小红背诵单词的总次数 int n = in.nextInt(); // 定义HashSet集合,存储已经记住的单词(HashSet查询效率高,适合判断是否存在) Set<String> knownWords = new HashSet<>(); // 定义HashMap,存储"未记住但已背诵过"的单词及其累计背诵次数(键:单词,值:累计次数) Map<String, Integer> countWords = new HashMap<>(); // 循环遍历每一次背诵的单词(共n次) for (int i = 0; i < n; i++) { // 读取当前背诵的单词 String word = in.next(); // 若当前单词已在"记住的单词"集合中,直接跳过(无需再统计次数) if (knownWords.contains(word)) { continue; } // 若单词未记住:更新其累计背诵次数 // getOrDefault(word, 0):若单词已在map中,取当前次数;否则取默认值0,之后+1 countWords.put(word, countWords.getOrDefault(word, 0) + 1); // 获取当前已记住的单词总数k(记忆新单词的要求是:累计次数 ≥ k+1) int k = knownWords.size(); // 检查当前单词的累计次数是否达到记忆要求 if (countWords.get(word) >= k + 1) { // 达到要求:将单词加入"记住的单词"集合 knownWords.add(word); } } // 输出最终记住的单词总数(即knownWords集合的大小) System.out.println(knownWords.size()); } }