括号闭合问题PHP版
写一个函数,判断扩号是否闭合,左右对称即为闭合,如:((()))
,)(())
,(())))
,(((((())
,(()())
,()()
答案
使用PHP的array_pop()和array_push()模拟一个栈,
- 遇到左括号进栈
- 遇到右括号出栈,如果栈里没有,说明不闭合
- 遍历到最后元素,判断栈内为空,即为闭合
function checkClose($str)
{
$stack = [];
for ($i = 0; $i < strlen($str); ++$i) {
if ($str[$i] == '(') {
$stack[] = '(';
}
if ($str[$i] == ')') {
$border = array_pop($stack);
if($border == null) {
return false;
}
}
}
if (count($stack) == 0) {
return true;
}
return false;
}
测试代码:
var_dump(checkClose('(())')); // bool(true)
var_dump(checkClose('(())()((')); // bool(false)
var_dump(checkClose('(())()()')); // bool(true)
var_dump(checkClose('(())()))')); // bool(false)
var_dump(checkClose('(5+2)*6/(3-1)')); // bool(true)