Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @param array $stack Стек пройденных скобок
- * @return mixed|null
- */
- function getLastFromStack(array $stack)
- {
- $length = count($stack);
- if ($length === 0) {
- return null;
- }
- return $stack[$length - 1];
- }
- /**
- * @param mixed $last Последняя скобка встеке
- * @param mixed $current Текущая скобка
- * @return bool
- */
- function compareBrace($last, $current)
- {
- return ($last === '[' && $current === ']')
- || ($last === '{' && $current === '}')
- || ($last === '(' && $current === ')');
- }
- // $message = "{[(]}"; // 2
- // $message = "[{}{}](}"; // 6
- // $message = "{[("; // 0
- $message = "(}{)"; // 1
- $braces = []; // Массив кавычек полученных из тестовой строки
- $stack = []; // Промежуточный стек для анализа
- /**
- * Преобразовываем строку в массив для удобства работы
- */
- $length = strlen($message);
- for($i = 0; $i < $length; $i++) {
- $braces[] = $message[$i];
- }
- /**
- * Проверка
- */
- $successStep = 0;
- foreach ($braces as $b) {
- if(count($stack) === 0) {
- $stack[] = $b;
- continue;
- }
- $last = getLastFromStack($stack);
- $sameTypeBraces = compareBrace($last, $b);
- if ($sameTypeBraces) {
- $successStep++;
- array_pop($stack);
- } else {
- $stack[] = $b;
- }
- }
- if (count($stack) === 0) {
- echo '-1';
- } else {
- echo 'error';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement