44. Поиск наименее частого слова в строке #
Условие задачи:
🔥 Дана очень длинная строка text
. Необходимо найти слово, которое встречается в ней минимальное количество раз (но хотя бы один раз) и вернуть это слово. Если таких слов несколько, вернуть любое из них.
Код:
public class RareWordFinder {
public static String findLeastFrequentWord(String text) {
// TODO
}
public static void main(String[] args) {
String text = "apple orange banana apple pear banana apple";
System.out.println(findLeastFrequentWord(text)); // например, "orange" или "pear"
}
}
Спойлеры к решению
Подсказки
💡 Разбейте строку на слова с помощью
💡 Используйте
💡 Пройдитесь по записи в
💡 Учтите, что строка может содержать пунктуацию — при необходимости очистите слова от знаков препинания.
String.split("\\s+")
.💡 Используйте
Map<String, Integer>
для подсчёта количества вхождений каждого слова.💡 Пройдитесь по записи в
Map
и найдите ключ с минимальным значением счётчика.💡 Учтите, что строка может содержать пунктуацию — при необходимости очистите слова от знаков препинания.
Решение
import java.util.*;
public class RareWordFinder {
public static String findLeastFrequentWord(String text) {
// Разбиение на слова
String[] words = text.split("\\s+");
Map<String, Integer> freq = new HashMap<>();
for (String w : words) {
String word = w.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
if (word.isEmpty()) continue;
freq.put(word, freq.getOrDefault(word, 0) + 1);
}
// Поиск слова с минимальной частотой
String rare = null;
int minCount = Integer.MAX_VALUE;
for (Map.Entry<String, Integer> entry : freq.entrySet()) {
if (entry.getValue() < minCount) {
minCount = entry.getValue();
rare = entry.getKey();
}
}
return rare;
}
public static void main(String[] args) {
String text = "apple orange banana! apple, pear? banana apple";
System.out.println(findLeastFrequentWord(text)); // orange или pear
}
}