Finding out all the expressions within brackets

Finding out all the expressions within brackets : I was actually asked to find out the smallest bracket expression within an expression, I have omitted the function to check for the smallest string and omitting spaces within the expression.

This was actually an interview question at a startup in Seawoods, Navi Mumbai.

Given an expression like ((a + b * d) * (x / 2)) * (1 + (y + (x - 2) / 10)) the smallest expression within brackets is x / 2 and x - 2. If we can find all the expressions within the brackets, then finding the smallest ones is as simple enough by finding the length after removing the spaces.

<?php
$s = "((a + b * d) * (x / 2)) * (1 + (y + (x - 2) / 10))";
$b = [];
$j = 0;
$stack = [];

for ($i = 0; $i < strlen($s); $i++)
{   
    if ($s[$i] == '(')
    {       
        $b[++$j] = '';
    }
    elseif ($s[$i] == ')')
    {       
        $stack[] = ($b[$j--] .= ')');   
    }
    for ($k = 1; $k <= $j; $k++)
    {
        $b[$k] .= $s[$i];
    }
}
echo $s.PHP_EOL;
print_r($stack);
echo PHP_EOL;
?>
php brackets.php 
((a + b * d) * (x / 2)) * (1 + (y + (x - 2) / 10))
Array
(
    [0] => (a + b * d)
    [1] => (x / 2)
    [2] => ((a + b * d) * (x / 2))
    [3] => (x - 2)
    [4] => (y + (x - 2) / 10)
    [5] => (1 + (y + (x - 2) / 10))
)

No Comments Yet