小红书有一个推荐系统,可以根据用户搜索的关键词推荐用户希望获取的内容。
现在给定小红的搜索记录(记录为分词后的结果),我们认为当一个单词出现的次数不少于3次时,该单词为“用户期望搜索的单词”,即称为关键词。请你根据小红的记录,输出小红的用户画像对应的所有关键词。
一行字符串,仅由小写字母和空格组成。代表小红的搜索记录。
字符串长度不超过100000。
小红所有的关键词。每行输入一个。你需要按照搜索频次从高到低输出。频次相同的,你需要按字典序升序输出。
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());
}
}
}
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);
}
}
}