Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.55 KB | None | 0 0
  1. <?php
  2. /*
  3. Необходимо написать функцию, которая принимает на вход массив со списком слов
  4. и возвращает сгруппированные слова. К одной группе относятся слова, которые
  5. могут быть получены одно из другого с помощью произвольной перестановки букв.
  6.  
  7. Например:
  8.     make_groups(['rfv', 'vfr', 'abc', 'bac', 'dbatre', 'qwer', 'cba', 'terbda'])
  9.  
  10. Вернет:
  11.     [
  12.         ['rfv', 'vfr'],
  13.         ['abc', 'bac', 'cba'],
  14.         ['dbatre', 'terbda'],
  15.         ['qwer']
  16.     ]
  17.  
  18. Здесь rfv получается из vfr с помощью перестановки v и r,
  19. а из слов abc, bac и cba формируется общая группа, потому что любое
  20. из этих слов превращается в соседнее путём одной или нескольких
  21. перестановок букв.
  22.  
  23. Протестируйте свой код.
  24. */
  25.  
  26. function make_groups(array $words)
  27. {
  28.     $groups = [];
  29.  
  30.     foreach ($words as $word) {
  31.         $letters = str_split($word);
  32.         sort($letters);
  33.         $index = implode($letters);
  34.         if (!array_key_exists($index, $groups)) {
  35.             $groups[$index] = [];
  36.         }
  37.         array_push($groups[$index], $word);
  38.     }
  39.  
  40.     return array_values($groups);
  41. }
  42.  
  43. $r = make_groups(['rfv', 'vfr', 'abc', 'bac', 'dbatre', 'qwer', 'cba', 'terbda']);
  44. print_r($r);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement