Сложность: medium
В английском языке есть понятие "корень", за которым может следовать какое-то другое слово, чтобы образовать другое более длинное слово - назовем это слово производным. Например, если за корнем "help" следует слово "ful", мы можем образовать производное "helpful". Дайте словарь, состоящий из множества корней, и предложение, состоящее из слов, разделенных пробелами, замените все производные в предложении на образующий их корень. Если производное может быть заменено более чем одним корнем, замените его корнем, имеющим наименьшую длину. Верните предложение после замены.
Пример:
Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
Output: "the cat was rat by the bat"
👨💻 Алгоритм:
1⃣Преобразуйте словарь корней в набор для быстрого поиска.
2⃣Пройдите по каждому слову в предложении и найдите самый короткий корень, который является префиксом этого слова.
3⃣Замените слово найденным корнем и соберите обновленное предложение.
😎 Решение:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Solution {
public String replaceWords(List<String> roots, String sentence) {
Set<String> rootSet = new HashSet<>(roots);
StringBuilder result = new StringBuilder();
for (String word : sentence.split(" ")) {
String replacement = word;
for (int i = 1; i <= word.length(); i++) {
String prefix = word.substring(0, i);
if (rootSet.contains(prefix)) {
replacement = prefix;
break;
}
}
if (result.length() > 0) {
result.append(" ");
}
result.append(replacement);
}
return result.toString();
}
}
Ставь 👍 и забирай 📚 Базу знаний
