()* -> In-valid
()(* -> valid
*)() -> valid
()** -> valid
)( -> In-valid
)* -> In-valid
我try 并坚持实现代码,因为我知道我们必须处理堆栈,但我只是停留在那里,能有人PHP专家做了吗:)并解释它.
- 输入将是类似"()*"的字符串.
- "*"可用作开括号和闭括号
- 在有效表达式中,开(左)括号应包含右(右)括号.
我试着用以下代码来做,不知道我的方向是否正确:)
$scenario = "()*";
$stackOne = str_split($scenario);
$stackTwo = array();
$counter = 1;
function push(array $arr, ?string $value)
{
$arr[] = $value;
return $arr;
}
function pop(array $arr)
{
$count = count($arr) -1;
if ($count > 0) unset($arr[$count]);
return $arr;
}
function isValid(array $arr,string $value)
{
$mapping= [
"*" => ["(", ")", "*"],
"(" => ["*", ")"],
")" => ["*", "("],
];
if (empty($arr)) return "push";
dd($arr[count($arr) - 1]);
if(in_array($arr[count($arr) - 1] ,$mapping[$value])) return "pop";
}
foreach ($stackOne as $key => $value) {
$output = isValid($stackTwo, $value);
if ($output === "push") {
$stackTwo = push($stackTwo, $value);
} elseif ($output === "pop") {
$stackTwo = pop($stackTwo);
}
}
print_r($stackTwo);