实现方案:
根据“栈”的原理,一次遍历,所有“左括号”入栈;遇到对应的“右括号”则出栈
function isValid ($s)
{
// 奇数个
if (strlen($s) % 2 != 0) {
return false;
}
$sMap = [
'{' => '}',
'[' => ']',
'(' => ')'
];
$l = [];
$sArray = str_split($s);
foreach ($sArray as $sChar) {
// 列表仅有“右括号”
if (empty($l) && in_array($sChar, $sMap)) {
return false;
}
if (key_exists($sChar, $sMap)) {
// 左括号入栈
$l[] = $sChar;
} elseif ($sChar != $sMap[array_slice($l, -1, 1)[0]]) {
// 右括号和最后一个左括号不匹配
return false;
} else {
// 匹配则出栈
array_pop($l);
}
}
if (sizeof($l) == 0) {
return true;
}
return false;
}