Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 1 год назад.
Написать функцию, которая на входе принимает строку из скобок, и возвращает true если все открытые скобки закрыты, иначе - false. Возможные варианты скобок: ()[]{}.
Пример:
"(){}[]" => true
"([{}])" => true
"(}" => false
"[(])" => false
"[({})](]" => false
Мною было предложено следующее решение:
<?php
function isBracketsBalanced (string $input) : bool {
$costs = [
'[' => 1, '(' => 10, '{' => 100,
']' => -1, ')' => -10, '}' => -100
];
$brackets = str_split ($input);
$opened = [- $costs [end ($brackets)]];
$balance = 0;
while (($bracket = array_pop ($brackets)) !== NULL) {
$cost = $costs [$bracket];
$balance += $cost;
if ($cost < 0)
$opened [] = - $cost;
else if ($cost == end ($opened))
array_pop ($opened);
else
return FALSE;
}
return $balance == 0;
}
https://repl.it/repls/SandyPriceyDevices
Резюме проверяющего: задача решена на хорошем, но недостаточно высоком уровне.
Может кто-нибудь объяснить что именно в предложенном мной решении на "недостаточно высоком уровне"?
Вот формально, зачем вообще у вас какой то баланс и эти значения 1,10,100 ? Вам вроде нужен стек, открывающая скобка - добавляете в стек. Закрывающая - смотрите на вершине парная или нет. Если парная то удаляете, иначе вообще выход. Таков алгоритм должен быть? Если да, то при чем тут вообще эти числа?
function checkBraces($input){
$braces = str_split($input);
$map = [']' => '[', ')' => '(', '}' => '{'];
$closing = array_keys($map);
$stack = [];
foreach($braces as $b){
if(!in_array($b, $closing)){
$stack[] = $b;
continue;
}
if(end($stack) != $map[$b]) return false;
array_pop($stack);
}
return count($stack) == 0;
}
еще можно вот так решить :D
function check2($input){
$repl = str_replace(["}", ")", "]"],["{r", "(r", "[r"], $input);
$result = preg_replace('/([\[({])(?R)*\1r/', "", $repl);
return mb_strlen($result) == 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть вот такая функция! Результатом curl является заголовок с редиректом на статус оплаты: Положительная https://kartonua/status/ok
Делаю что-то своего движкаБлоговый сайт, так вот в каждой странице нужно подключать файл с переменными, константами и модулями
возник такой вопрос: возможно ли написать приложение под android, которое будет работать со сторонним сайтом? Интересующая на нем страничка...