题解 | 小红背单词
小红背单词
https://www.nowcoder.com/practice/b3d0fa1c43c44e0580654cb93c1bfdb9
模拟哈希计数
原理:维护一个 Map 记录每个未记住单词出现的次数。同时维护一个 Set 记录已记住的单词。每遇到一个新单词,如果是已记住的则跳过;如果是未记住的,其计数加 1。当计数达到 alreadyKnown.size() + 1 时,将其移入 Set 并清空其计数。
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Set<String> known = new HashSet<>(); // 记住的单词集合
Map<String, Integer> attempt = new HashMap<>(); // 标记单词学习的次数
for(int i = 0; i < n; i++) {
String word = in.next();
if(known.contains(word)) continue;
int count = attempt.getOrDefault(word, 0) + 1;
if(count == known.size() + 1) { // 满足记住的条件
known.add(word);
attempt.remove(word); // 已记住,清楚尝试记录
}
else {
attempt.put(word, count);
}
}
System.out.println(known.size());
}
}
腾讯成长空间 6074人发布