题解 | 小红背单词

小红背单词

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());
    }

}

全部评论

相关推荐

烤点老白薯:亲娘嘞🐶💩啊你的简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务