TGViewer
PHP | LeetCode PHP | LeetCode @easy_php_task · 1.33K subscribers
Post #1038 124
Задача: 1258. Synonymous Sentences
Сложность: medium

Вам дан список эквивалентных пар строк synonyms, где synonyms[i] = [si, ti] означает, что si и ti являются эквивалентными строками. Вам также дан текст предложения. Верните все возможные синонимичные предложения, отсортированные лексикографически.

Пример:
Input: synonyms = [["happy","joy"],["sad","sorrow"],["joy","cheerful"]], text = "I am happy today but was sad yesterday"
Output: ["I am cheerful today but was sad yesterday","I am cheerful today but was sorrow yesterday","I am happy today but was sad yesterday","I am happy today but was sorrow yesterday","I am joy today but was sad yesterday","I am joy today but was sorrow yesterday"]


👨‍💻 Алгоритм:

1⃣Построить граф синонимов, используя структуру данных, такую как Union-Find или просто с использованием DFS/BFS.

2⃣Пройти по каждому слову в предложении и найти все возможные синонимы.
Сгенерировать все возможные комбинации предложений.

3⃣Отсортировать полученные предложения лексикографически.

😎 Решение:
class Solution {
function generateSentences($synonyms, $text) {
$graph = [];

foreach ($synonyms as $pair) {
$graph[$pair[0]][] = $pair[1];
$graph[$pair[1]][] = $pair[0];
}

$words = explode(' ', $text);
$synonymGroups = [];
foreach ($words as $word) {
$synonymGroups[] = $this->findSynonyms($graph, $word);
}

$sentences = [];
$this->generate($sentences, $synonymGroups, "", 0);
sort($sentences);
return $sentences;
}

private function findSynonyms($graph, $word) {
$synonyms = [];
$stack = [$word];
while (!empty($stack)) {
$w = array_pop($stack);
if (!isset($synonyms[$w])) {
$synonyms[$w] = true;
if (isset($graph[$w])) {
foreach ($graph[$w] as $neighbor) {
$stack[] = $neighbor;
}
}
}
}
$result = array_keys($synonyms);
sort($result);
return $result;
}

private function generate(&$sentences, $groups, $sentence, $index) {
if ($index == count($groups)) {
$sentences[] = trim($sentence);
return;
}
foreach ($groups[$index] as $word) {
$this->generate($sentences, $groups, $sentence . " " . $word, $index + 1);
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_php_task
  1. Oct 15, 2026Задача: 474. Ones and Zeroes Сложность: medium Дан массив двоичных строк strs и два целых…
  2. Oct 15, 2026Задача: 1273. Delete Tree Nodes Сложность: medium Дерево, укорененное в узле 0, задано сле…
  3. Oct 14, 2026Задача: 724. Find Pivot Index Сложность: easy Если задан массив целых чисел nums, вычислит…
  4. Oct 14, 2026Задача: 674. Longest Continuous Increasing Subsequence Сложность: easy Дан неотсортированн…
  5. Oct 13, 2026Задача: 899. Orderly Queue Сложность: hard Вам дана строка s и целое число k. Вы можете вы…
  6. Oct 11, 2026Задача: 913. Cat and Mouse4 Сложность: hard В игру на неориентированном графе играют два и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →