首页 > 试题广场 >

小红书推荐系统

[编程题]小红书推荐系统
  • 热度指数:3258 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红书有一个推荐系统,可以根据用户搜索的关键词推荐用户希望获取的内容。
现在给定小红的搜索记录(记录为分词后的结果),我们认为当一个单词出现的次数不少于3次时,该单词为“用户期望搜索的单词”,即称为关键词。请你根据小红的记录,输出小红的用户画像对应的所有关键词。

输入描述:
一行字符串,仅由小写字母和空格组成。代表小红的搜索记录。
字符串长度不超过100000。


输出描述:
小红所有的关键词。每行输入一个。你需要按照搜索频次从高到低输出。频次相同的,你需要按字典序升序输出。
示例1

输入

kou red game red ok who game red karaoke yukari kou red red nani kou can koukou ongakugame game

输出

red
game
kou
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取整行搜索记录
        String line = scanner.nextLine();
        // 按空格分割成单词数组
        String[] words = line.split(" ");
        
        // 统计每个单词出现的次数
        Map<String, Integer> countMap = new HashMap<>();
        for (String word : words) {
            countMap.put(word, countMap.getOrDefault(word, 0) + 1);
        }
        
        // 筛选出出现次数不少于3次的单词(关键词)
        List<Map.Entry<String, Integer>> keywords = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() >= 3) {
                keywords.add(entry);
            }
        }
        
        // 自定义排序规则:
        // 1. 按出现次数从高到低排序
        // 2. 次数相同的按字典序升序排序
        Collections.sort(keywords, (a, b) -> {
            if (!a.getValue().equals(b.getValue())) {
                return b.getValue() - a.getValue(); // 次数降序
            } else {
                return a.getKey().compareTo(b.getKey()); // 字典序升序
            }
        });
        
        // 输出结果
        for (Map.Entry<String, Integer> entry : keywords) {
            System.out.println(entry.getKey());
        }
    }
}

发表于 2025-08-31 14:13:15 回复(0)
import java.util.*;
import java.math.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String input = in.nextLine();
        String[] str = input.split(" ");
        HashMap<String, Integer> zimu = new HashMap<>();
        for (int i = 0; i < str.length; i++) {
            if (zimu.containsKey(str[i])) {
                zimu.put(str[i], zimu.get(str[i]) + 1);
            } else {
                zimu.put(str[i], 1);
            }
        }

        List<String> keyWords = new ArrayList<>();
        for (Map.Entry<String, Integer> c : zimu.entrySet()) {
            if (c.getValue() >= 3) {
                keyWords.add(c.getKey());
            }
        }

        keyWords.sort((a, b)-> {
            int com = zimu.get(b).compareTo(zimu.get(a));
            return com != 0 ? com : a.compareTo(b);

        });
        for (String word : keyWords) {
            System.out.println(word);
        }
    }
}


发表于 2025-07-22 23:08:12 回复(0)