Verification: a143cc29221c9be0

Php array переместить элемент в конец

Ответ 1

Начнем с удаления любых наборов символов, которые не используются {}[]или ().  Я создал вспомогательные функции, которые проверяют, существует ли какие-либо из этих наборов в строке, а также функцию replace для их удаления. пока ничего нельзя будет заменить. Наконец, надо проверить, равна ли оставшаяся длина строки после удаления всех наборов 0. Это означает, что все скобки правильно открываются и закрываются. В противном случае возвращаем false.

function exist($c, $s){

    return strpos($s, $c) !== false;

}

function replace($c, $s){

    return str_replace($c, "", $s);

}

function open_closed($str){

    // удаляем символы

    $str = preg_replace("/[^\{\}\(\)\[\]]+/", '', $str);

    while(true){

        if(exist("{}", $str))

            $str = replace("{}", $str);

        elseif(exist("[]", $str))

            $str = replace("[]", $str);

        elseif(exist('()', $str))

            $str = replace("()", $str);

        else

            break;

    }

    return !strlen($str);

}

$string1 = "[{()[Hello]{}}]";

var_dump(open_closed($string1));  //  true

[{()[]}]

[{()}]

[{}]

[]


$string2 = "abc[({})][({)]99";

var_dump(open_closed($string2)); // false

[({})][({)]

[()][({)]

[][({)]

[({)]

Ответ 2

Попробуйте использовать стековую структуру данных. Если вы нашли открывающую скобку, переместите ее в стек. Если вы нашли закрывающую скобку, вытащите верхний элемент из стека. Если он не подходит, например, первая скобка - ), а вытолкнутый элемент - [ или стек пуст, то выражение недействительно.

Важно: в конце выражения стек должен быть пуст.

Ответ 3

Простой, немного грубый метод (и далеко не идеальное решение). Это скорее ответ для начинающих:

  1. Удалите все остальные символы (если они есть)

  2. Замените все наборы (например, {}, [] и ())

  3. Является ли результат пустой строкой (все совпадения исчезли, значит, true).

Сделайте цикл, заменяя все закрытые множества и затем смотрите, стала ли она короче. Если нет, то остановите цикл. Если да, то продолжите цикл еще на одну итерацию. И когда он закончится и станет пустым, все станет ясно :)

Примеры:

  • [{}] -> [] ->  => true

  • ({}[{}]) -> ([]) -> () ->  => true

  • {]} -> ] => false