Advertisement
dsandal

Untitled

Jun 14th, 2018
84
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.  * @param array $stack Стек пройденных скобок
  5.  * @return mixed|null
  6.  */
  7. function getLastFromStack(array $stack)
  8. {
  9.     $length = count($stack);
  10.  
  11.     if ($length === 0) {
  12.         return null;
  13.     }
  14.  
  15.     return $stack[$length - 1];
  16. }
  17.  
  18. /**
  19.  * @param mixed $last Последняя скобка встеке
  20.  * @param mixed  $current Текущая скобка
  21.  * @return bool
  22.  */
  23. function compareBrace($last, $current)
  24. {
  25.     return ($last === '[' && $current === ']')
  26.         || ($last === '{' && $current === '}')
  27.         || ($last === '(' && $current === ')');
  28. }
  29.  
  30. // $message = "{[(]}"; // 2
  31. // $message = "[{}{}](}"; // 6
  32. // $message = "{[("; // 0
  33. $message = "(}{)"; // 1
  34.  
  35. $braces = []; // Массив кавычек полученных из тестовой строки
  36.  
  37. $stack = []; // Промежуточный стек для анализа
  38.  
  39. /**
  40.  * Преобразовываем строку в массив для удобства работы
  41.  */
  42. $length = strlen($message);
  43.  
  44. for($i = 0; $i < $length; $i++) {
  45.     $braces[] = $message[$i];
  46. }
  47.  
  48. /**
  49.  * Проверка
  50.  */
  51. $successStep = 0;
  52. foreach ($braces as $b) {
  53.  
  54.     if(count($stack) === 0) {
  55.         $stack[] = $b;
  56.         continue;
  57.     }
  58.  
  59.     $last = getLastFromStack($stack);
  60.  
  61.     $sameTypeBraces = compareBrace($last, $b);
  62.     if ($sameTypeBraces) {
  63.         $successStep++;
  64.         array_pop($stack);
  65.     } else {
  66.         $stack[] = $b;
  67.     }
  68. }
  69.  
  70. if (count($stack) === 0) {
  71.     echo '-1';
  72. } else {
  73.     echo 'error';
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement